哪些npm包将在Angular 2上运行?我怎么说?

Dis*_*ive 8 javascript commonjs npm typescript ecmascript-6

是否需要修改NPM包以与Angular 2兼容(例如,添加类型,为它们制定指令)或任何现有包都可以工作吗?如果它们不兼容,我怎么知道什么是不兼容的?

例如,假设我要导入此包(https://github.com/pvorb/node-md5).我知道有一个用于角度2的ts-md5包来做md5 - 我只是以这个包为例.

我怎么能让这个工作?

我用它安装了它

npm install md5 --save
npm install @types/md5 --save
Run Code Online (Sandbox Code Playgroud)

但我似乎无法进口它

import {md5} from 'md5';
Run Code Online (Sandbox Code Playgroud)

我尝试运行后收到此错误消息

模块'"/ Users/xxx/Source/tempProjects/ngUnderscore/node_modules/@ types/md5/index"'解析为非模块实体,无法使用此结构导入.

我不确定这个消息是什么意思.这是否意味着在当前状态下,包不兼容或我是否尝试错误地使用包?

Voj*_*ech 6

我设法使用declare和require来代替导入(导入不适用于这个非模块的lib)

declare const require: any;
const md5 = require('md5');
Run Code Online (Sandbox Code Playgroud)

如果您不想像这样解决导入问题,可以尝试使用名为ts-md5的 Typescript MD5实现.然后导入像下面的那个应该工作.(参考这个问题)

import { Md5 } from 'ts-md5/dist/md5'
Run Code Online (Sandbox Code Playgroud)

如果没有TS实现,您可以在DefinitelyTyped中搜索类型,然后只需安装package bynpm i --save-dev @types/{package-name}


mlk*_*mlk 1

他们通常会说它适用于哪个 Angular,有时您有一个包适用于两者或每种。

如果您使用的是 Angular 1x 软件包并且没有 Angular2 兼容性,那么您可以只使用ngUpgrade

但如果你使用的是通用插件,那么必须有一个 Angular 2 解决方案。

如果你想要相反的方式,那么你可能走错了路。