【问题标题】:Lodash in angular2, declare var_:any not workingangular2 中的 Lodash,声明 var_:any 不起作用
【发布时间】:2016-07-10 08:43:36
【问题描述】:

我在我的 angular2 应用程序中使用 lodash。通过使用 declare var _: any; 我正在做 lodash 操作,例如 _.findIndex(...) 。现在我面临一个问题。有时在加载页面时出现如下错误

EXCEPTION: ReferenceError: _ is not defined

如何避免这种情况? 作为我的假设,lodash代码在declare var _: any;之前执行

【问题讨论】:

标签: angular lodash


【解决方案1】:

实际上,这取决于在您的 HTML 页面中配置/包含 lodash 库的方式:

  • 将 lodash.js 文件包含到 script 元素中。这样,lodash 可以作为全局变量 (_) 进入应用程序。在这种情况下,您需要利用 TypeScript 的环境声明来定义它:

    declare var _: any;
    
  • 将 lodash.js 文件配置到 SystemJS 配置中。这样,lodash 库将检测到它将在模块加载器中使用,因此它将自己注册为模块并将_ 变量返回到导出中。在这种情况下,您需要使用导入来获取它。由于_变量是直接设置成exports的,所以需要这样导入:

    import _ from 'lodash';
    

    相应的配置是:

    System.config({
      (...)
      map: {
        lodash: 'node_modules/lodash/lodash.js'
      },
      meta: {
        lodash: { format: 'amd' }
      }
    });
    

【讨论】:

  • 我们不能直接用组件顶部的<reference ...>吗?
  • 其实references只是为了编译导入库的合约...不是运行时的。
  • 我还是不清楚。看我做了这个,plnkr.co/edit/3xEZBpwz6NCMU1uxBg5O?p=preview你能告诉我它有什么问题吗?我不明白runtime 是什么意思?
  • 在你的例子中,你在脚本元素中包含了 lodash,所以 _ 变量是直接可用的。由于您使用即时转译,因此您看不到错误;-) 但是使用 tsc,我想您会有一些错误。您应该添加declare var _: any<reference_ 变量提供合同。运行时是指执行应用程序时...
  • 哦,我明白了。我必须检查一下。
【解决方案2】:

如果您使用的是 TypeScript,则需要在文件中导入库:

import _ from 'lodash';

看一个类似的问题: angular2 failing lodash import

【讨论】:

    猜你喜欢
    • 2016-08-04
    • 2017-12-24
    • 2015-08-13
    • 2017-04-02
    • 2017-06-27
    • 2021-11-26
    相关资源
    最近更新 更多