在 Angular 2 组件中使用 npm 包

Posted

技术标签:

【中文标题】在 Angular 2 组件中使用 npm 包【英文标题】:use npm package in Angular 2 component 【发布时间】:2018-02-15 14:44:29 【问题描述】:

我想在我的 Angular 4 组件中使用一个可用的 npm 包,但我很难让它工作。该软件包称为“ip”,可从https://www.npmjs.com/package/ip获得

我添加的包如下:

npm install ip --save

npm install --save @types/ip

在我的 app.module.ts 中有:

import  isV4Format  from 'ip';

我将 isV4Format 添加到 app.module.ts 的导入列表中

然后我尝试在我的班级中使用ip包如下:

import  isV4Format  from 'ip';

export class TabValidator 
    private static _check(address: string): any 
        const ip = require('ip');
        if (!myip.isV4Format(address))  return  'wrongFormat': true ; 
        return null;
    

编译器抱怨组件:

找不到名称“需要”

关于 app.module.ts:

类型 ' 声明的参数:(typeof InterfacesComponent | typeof EditnicComponent | typeof AppComponent)[]; i...' 不能分配给“NgModule”类型的参数。

有人能告诉我上面有什么问题吗?我怀疑有几件事不对劲。我在 SO 上发现了 2 个类似的问题,但它们似乎适用于不同的角度版本。

【问题讨论】:

我按照其他地方的建议尝试了“npm install @types/node”,但没有帮助 尝试将 require 块移动到导入的正下方,如下所示:import ... const ip = require('ip'); 然后在函数中使用它。如果没有帮助,则在 require 块中写入 js 的路径,例如 const Highcharts = require('highcharts/highstock'); 【参考方案1】:

关于 SO 有很多错误/过时的答案,包括这些错误的答案:

Cannot find name 'require' after upgrading to Angular4

Types not found

Angular 4: "Cannot find name 'require'

Angular 似乎让它变得更容易了;只需将其添加到您要使用节点模块的组件中:

export declare let require: any;
const ip = require('ip');

现在这可能不是实现您想要的最佳方式,因为我读过一些关于在 Angular 中使用“require”会对代码共享或类似内容产生负面影响的内容。但是,如果有人可以发布更好的答案,我会接受!

【讨论】:

以上是关于在 Angular 2 组件中使用 npm 包的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular 2 应用程序中使用本地 npm 存储库中的组件

Angular2总结

Angular 2 npm 安装错误包

Angular入门教程

反应 | Npm 包 - 如何导出 2 个组件以用作 npm 包

如何在 Angular 2 组件中访问全局变量