Angular报错引入faker类库: error TS2580: Cannot find name 'require'.

2023-05-16

Angular报错引入faker类库: error TS2580: Cannot find name ‘require’.

faker 是生成测试数据的一个js类库。

在 InMemoryDataService 中调用 fake 类库,可以生成不同的英雄姓名。但是,在引入 fake 类时却报错了,这是为什么呢?

报错详情

ERROR in src/app/services/in-memory-data.service.ts(6,13): 
error TS2580: Cannot find name 'require'. 
Do you need to install type definitions for node? 
Try `npm i @types/node`.

原因是在 ts 中无法调用 jsrequire 语法。

解决办法:

在使用 require 语法前增加一个声明“declare const require: any”。

declare const require: any; // <-- 新增
const faker = require('faker');

可以看下在Angular项目根目录的 test.ts 文件, 就有这个用法。

// test.ts
import 'zone.js/dist/zone-testing';
import { getTestBed } from '@angular/core/testing';
import {
  BrowserDynamicTestingModule,
  platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';

// <---- 这里有声明 require
declare const require: any;
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
  BrowserDynamicTestingModule,
  platformBrowserDynamicTesting()
);
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

完整代码如下:

import { InMemoryDbService } from 'angular-in-memory-web-api';
import { Hero } from '../models/hero';
import { Injectable } from '@angular/core';

declare const require: any;  // <-- 新增
const faker = require('faker');

@Injectable({
  providedIn: 'root',
})
export class InMemoryDataService implements InMemoryDbService {
  createDb() {
    const heroes = [
      { id: 11, name: faker.name.findName() },
      { id: 12, name: faker.name.findName() },
      { id: 13, name: faker.name.findName() },
      { id: 14, name: faker.name.findName() },
      { id: 15, name: faker.name.findName() },
      { id: 16, name: faker.name.findName() },
      { id: 17, name: faker.name.findName() },
      { id: 18, name: faker.name.findName() },
      { id: 19, name: faker.name.findName() },
      { id: 20, name: faker.name.findName() },
    ];

    const nobodies: any[] = [ ];

    // entities with string ids that look like numbers
    const stringers = [
      { id: '10', name: 'Bob String'},
      { id: '20', name: 'Jill String'}
    ];

    const db = { heroes, nobodies, stringers };

    return db;
  }
  
  genId(heroes: Hero[]): number {
    return heroes.length > 0 ? 
      Math.max(...heroes.map(hero => hero.id)) + 1 : 11;
  }
}

参考链接:

https://angular.io/tutorial/toh-pt6
http://www.cnblogs.com/htoooth/p/6942080.html
https://www.npmjs.com/package/faker

更多内容,请查看项目代码:

https://github.com/cnwyt/angular-tour-of-heroes

[END]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular报错引入faker类库: error TS2580: Cannot find name 'require'. 的相关文章

  • 如何在 Angular 6 中过滤复杂结构化的 Json 数据

    我有一个复杂的结构化 json 数据 需要在我的 Angular 6 应用程序中应用高级过滤 JSON 数据 StudentId 1 StudentName Student1 Sex M Programs StudentId 1 Progr
  • 如何在 Angular 6 中编辑环境变量而不重建?

    我通常将 API URL 设置为environment ts文件 我必须将相同的版本部署到具有不同 API URL 的多个客户端 目前我正在更改环境变量后进行单独的构建 有没有办法在构建后编辑环境变量 以便我可以为每个客户端提供相同的构建
  • 模糊不起作用 - Angular 2

    我试图在角度 2 中设置一个蓝色事件 如下所示 div class form group 组件 ts import Component ViewChild ElementRef Output EventEmitter from angula
  • 如何在 PrimeNG 的 FileUpload 组件中中止文件上传?

    一 总结 基于PrimeNG中选择的文件文件上传组件 https www primefaces org primeng fileupload 我想中止特定文件名模式的文件上传到后端服务器 角度 6 0 7 PrimeNG 6 0 2 2 第
  • 找不到模块“webpack”

    决定不在我的项目中使用 webpack 当我把它从package json出现以下错误ng s 找不到模块 webpack 错误 找不到模块 webpack 在 Function Module resolveFilename 内部 modu
  • Faker 生成奇怪的电话号码?

    因此 我使用 Laravel 创建一个数据库并对其进行播种 我遇到了一个问题 它生成一个电话号码 如下所示 635 889 5802 x45134 这会因超出数据库列的所需长度而导致问题 所以我的问题是 从实践层面来看 它为什么这样做 现实
  • 在 Angular 中使用异步管道设置选择元素的选定项目

    角度专家 我试图理解 Angular 中的异步管道 但我陷入了一个基本场景 我在用户界面中有两个选择元素 一个包含帖子 一个包含相关评论 我想将一个帖子 最后一个 设置为显示帖子的选择元素的最初选择的帖子 并且我想使用所选项目来过滤第二个选
  • 角度 2 |类型“{}”的指令参数不可分配给

    我是 Angular 2 的菜鸟 我正在做 YouTube 教程 但每个教程都有directives 我被困的部分 应用程序组件 ts import Component from angular core import HeaderComp
  • 向结构指令添加多个输入

    我一直在关注如何使用结构指令的示例here https angular 2 training book rangle io handout advanced angular directives providing context vari
  • HttpClient 请求拦截器,例如在从服务器获取响应时

    我想在请求尝试命中时打开加载程序弹出窗口 并在收到响应后将其关闭 有什么方法可以使用 httpclient 从一个地方执行它 像这样的事情 Injectable export class I1 implements HttpIntercep
  • 什么是 Tree Shaking?为什么需要它?

    我已经开始学习 Angular 2 并且遇到了 tree shake 这个术语 但我无法从初学者的角度找到任何好的解释 我在这里有两个问题 什么是 Tree Shaking 为什么需要它 我该如何使用它 我看到你在这里有三个问题 1 什么是
  • 角度守卫,文档中的声明不明确

    我想深入了解角度 所以我读了the docs http angular io这非常有帮助 现在我正在研究守卫 我在文档中读到了这个声明 路由器首先从最深的子路由到顶部检查 CanDeactivate 和 CanActivateChild 防
  • 当数据未定义或为空时如何使用 Lodash

    在我的应用程序中 如果来自服务的数据未定义或为 null 我的 html 将无法加载 并且会收到 数据未定义 错误 所以我尝试使用lodash 但不知道如何使用它 在我下面的 ts 文件中 this PartService GetDataV
  • Ionic 3 如何确保在加载视图之前获取数据库数据

    我正在使用基于令牌的身份验证 并且令牌已保存在数据库中 当应用程序启动时 我需要从数据库获取令牌并使其可用 然后再进行 API 调用 最好的方法是什么 在组件中 ngOnit storage get token then val gt Ma
  • Angular 2 - 检查图像 URL 是否有效或损坏

    我正在从 API 获取大量图像 URL 并将它们显示在 Angular 2 Web 应用程序中 有些 URL 已损坏 我想用本地存储在我的网络服务器上的默认图片替换它们 有人建议如何测试 url 并在状态代码 404 的情况下替换损坏的图像
  • 设置角度组件的完整高度

    我无法让我的列表成为全高 我的代码由于嵌套组件而更加复杂 但我仍然可以使用此代码来复制它 这是一个笨蛋 http plnkr co edit R0QgLz8cjyRHYOLf4uJW http plnkr co edit R0QgLz8cj
  • 选择列表设置所选项目 角度 2 ngModel

    这是我当前的代码
  • 为什么现代 JavaScript 框架不鼓励与 DOM 直接交互

    在处理 AngularJS Angular 和 React 等 JS 框架时 我发现不鼓励直接与 DOM 交互 如果忽略警告 通常会导致错误 当我说 与 DOM 交互 时 我的意思是使用document getElementById myE
  • 如何在 Angular 6 中包含外部 html 文件和 js 文件?

    我想在我的 Angular 6 项目中包含一些 html 文件并使用一些外部 js 文件中的函数 如何在 Angular 6 中包含外部 html 文件和 js 文件 您可以将这些文件放在src assets文件夹并指定路径angular
  • 带有 Angular2+ 的 dc.js 图表

    有人将 dc js 与 Angular2 应用程序一起使用过吗 任何帮助或指示将不胜感激 我能够使我的应用程序在正常的 html java 脚本上运行 现在我需要在 Angular 2 应用程序中实现相同的功能 Edit 几周后 我有了更好

随机推荐