在 angular5 中添加第三方(外部)js 库的问题

Posted

技术标签:

【中文标题】在 angular5 中添加第三方(外部)js 库的问题【英文标题】:Issue adding third-party (external ) js lib in angular5 【发布时间】:2018-06-21 12:57:17 【问题描述】:

我正在努力为 Angular 5 应用程序(Angular CLI:1.6.1)添加 jsplumb 社区 js 库版本。

第一次构建时没有对 tsconfig.json 进行任何配置,我收到以下错误。

ERROR in src/app/jsplumb/jsplumb.component.ts(4,25): error TS6143: Module '../../../node_modules/jsplumb/dist/js/jsplumb.js' was resolved to 'D:/myproj/angular5/myapp/node_modules/jsplumb/dist/js/jsplumb.js', but '--allowJs' is not set.

在 tsconfig.json 中使用 "allowJs":true 得到以下错误

ERROR in error TS5055: Cannot write file 'D:/myproj/angular5/myapp/node_modules/jsplumb/dist/js/jsplumb.js' because it would overwrite input file.
  Adding a tsconfig.json file will help organize projects that contain both TypeScript and javascript files. Learn more at https://aka.ms/tsconfig.

根据 tsconfig 常见问题解答

Why am I getting the error TS5055: Cannot write file 'xxx.js' because it would overwrite input file.

使用 outDir ("outDir": "./dist/out-tsc") 应该可以解决此问题。这已经在我的 tsconfig 中设置了。

如果我们将 noEmit 添加为 true,它只会构建应用程序,不包括任何 js,我们会得到一个空白屏幕。

让我知道是否有人尝试将外部 js 包含在新的 angular cli 中并遇到相同类型的错误,以及相同的解决方案是什么。

如果我尝试修改任何 ts 文件,如果没有向 tsconfig.json 添加任何其他选项,应用程序将成功编译并且我能够工作。但这在运行 ng build 以创建可部署的二进制文件时无济于事。

更新解决方法:直到 CLI 中的修复可用。对于开发(ng serve),从 tsconfig.json 中删除 allowJs,当你在添加 allowJs 时遇到错误时,只需修改 ts 文件以重新编译应用程序,这一次将编译成功。对于生产或分发,将 allowJs 添加回 tsconfig.json 使用ng build --prod --watch=auto 运行应用程序,您应该会看到有关在 node_module 中覆盖 JS 文件的错误,只需修改它应该重建的 ts 文件,因为 --watch=auto 在命令,但这次成功了。

【问题讨论】:

您能否准确添加在组件中导入 jsplumb 的方式?看起来您正在尝试使用文件路径导入 node_module。 看起来这是一个来自 angular-cli 的错误,用于 Angular 5 webpack,我已经在github.com/angular/angular-cli/issues/9290 中给出了重新创建的步骤。由于github.com/angular/angular/issues/21080 导致的阻止程序 你能粘贴你的 tsconfig 吗? "compileOnSave": false, "compilerOptions": "allowJs":true, "outDir": "./dist/out-tsc", "sourceMap": true, "declaration":假,“moduleResolution”:“节点”,“emitDecoratorMetadata”:真,“experimentalDecorators”:真,“目标”:“es5”,“typeRoots”:[“node_modules/@types”],“lib”:[“es2017 ", "dom" ] 我面临着完全相同的问题。目前,解决方法对我有用。 【参考方案1】:

如果您尝试将库导入 Angular 2+,您应该在 angular-cli.json 中进行。

您有一个scripts 键,您应该在其中配置所需的导入。它们通常是这样的:


    ...
    "scripts": [
        "../node_modules/MODULE/file.js"
    ],
    ...

您还可以使用<script src="/path_relative_to_root/file.js"> 在主index.html 中导入库(不推荐)

https://github.com/angular/angular-cli/wiki/angular-cli

https://github.com/angular/angular-cli/wiki/stories-global-scripts

Angular Cli Webpack, How to add or bundle external js files?

【讨论】:

【参考方案2】:

您是否尝试将其升级到 Angular 6?也许他们在新版本中修复了这个问题。

ng update @angular/cli

【讨论】:

以上是关于在 angular5 中添加第三方(外部)js 库的问题的主要内容,如果未能解决你的问题,请参考以下文章

QT使用外部库

通过 Grab 添加的外部库的可选依赖项不可用

在 angular4 中使用 money.js(外部 js 库)

如何添加外部 CSS 文件 - styleUrls - Angular 5 组件

在angular 5组件中调用外部js文件的函数

QtCreator里添加外部第三库头文件路径的方法(.pro文件)