include the library 到 angular 4.0 并在组件内使用它的正确工作流程是什么?

我的步骤:

yarn add mathjs

然后应该有一种方法可以在构建生命周期之一中注入(inject) js 库,以便 angular4 组件可以使用它。 JHipster 使用 Webpack 和 Yarn。

然后我尝试添加到 Component ( docs ):
import { mathjs } from "./mathjs";


var math = require('mathjs');

那些没有用。我错过了什么?

更新:

似乎 mathjs 使用旧方法建议 var math = require('mathjs') 。也许它在某种程度上类似于 JQuery question ......

UPDATE2

最佳答案

这是一个很好的问题,我很高兴你提出这个问题,因为我希望我第一次遇到这个小问题时就知道我要写的东西。这是一个 typescript /javascript 和 webpack 问题,然后才是 Angular 问题。我绝对计划尽快写一篇关于 my blog 的文章。

你的场景:

你跑

npm install mathjs
  • 现在您尝试使用来自组件的 math.js:
  • 找到 math.js dist js 文件 (node_modules/mathjs/dist/math.js) 并像这样引用
    import {mathjs} from "../../node_modules/mathjs/dist/math";
  • 但是你收到错误信息说 "set --allowJS". 你这样做:
    Set --allowJS in config (tsconfig.json){ "compilerOptions": { "allowJs": true, ...
  • 现在你得到:


  • 查看 math.js 源代码,您会看到它是一个老式的模块,但没有根包装函数(一个函数将它们全部带入并在黑暗中将它们绑定(bind)..)(稍后会详细介绍)。

  • 解决方案:为目标库 (@types/mathjs) 安装一个打字文件
  • 首先,检查是否可以在此处获取模块的@typings 文件
    https://microsoft.github.io/TypeSearch/
  • 从 npm ( https://www.npmjs.com/package/@types/mathjs ) 中获取 mathjs 打字文件并运行 npm install 将打字 .d.ts 文件添加到目标库的 node_modules 目录
    npm install --save @types/mathjs
  • 正确添加您的类型引用
    import * as mjs from "mathjs"

  • 像这样使用它:
    console.log("e was: " + mjs.e);
    

    我的 github 上有 math.js 库的完整解决方案
    https://github.com/res63661/importOldJSDemoWithTypings/

    更多:
    举个例子,看看你自己的 angular 项目。在使用 ng new 创建新项目后,每次运行 npm install 时,CLI 都会创建 node_modules 文件夹。深入这里并注意许多 .js 文件的 d.ts 文件。

    当打乱打字或定义您自己的(.d.ts 文件)时,请务必在构建之间重新启动服务器,因为当前打字似乎并未即时更新

    进一步阅读:
  • http://www.typescriptlang.org/docs/handbook/declaration-files/consumption.html
  • https://angular.io/guide/typescript-configuration#typescript-typings
  • https://microsoft.github.io/TypeSearch/

  • 最后:

    如果您处于紧要关头并且这对您不起作用,我确实成功地通过将其包装在主导出类型中为不同的(小得多)模块创建了自定义包装器
    export var moduleNamer = (function(){
      //module implementation
    }());
    

    然后将 .js 文件转储到我的组件本地,然后按如下方式引用它:
    //reference like this from your component:
    import {moduleNamer} from "./source";  //from source.js
    

    - 富有的

    关于javascript - 如何包含使用旧的导入方法到 Angular4.x 的 3rd 方库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45549698/

    10-09 10:15