【问题标题】:Typescript do you import `lodash` -- with `es2015` modules?打字稿你导入`lodash` - 与`es2015`模块?
【发布时间】:2016-09-29 07:24:52
【问题描述】:

它曾经可以工作,但现在我将我的项目更改为 ionic2@RC.0,并使用其新的 rollupes2015 捆绑/模块。我无法正确获取lodash

lodash在那里,但是在错误的地方——我需要的方法在_.default

npm 步骤

npm install lodash --save
npm install @types/lodash --save-dev --save-exact

javascript

import * as _ from "lodash";
console.log( Object.keys(_) )    // ["default", "__moduleExports"]
console.log(_.default.VERSION)   // 4.16.2

发生了什么事?

更新

import _ from "lodash";  // imports as lodash, not _

// Chrome debugger console:
console.log(_)      // VM2037:1 Uncaught ReferenceError: _ is not defined(…)
console.log(lodash) // function
console.log(Object.keys(lodash))  // returns: VM2075:1 ["templateSettings", "after", "ary", "assign", ...]

更新 2

也许这与 Chrome 调试器 + 汇总有关?我将我的代码更改为import _ from "lodash";,它工作正常——除了在调试器控制台中......

    console.log(">>> _.keys(_): " + _.keys(_).slice(10, 20));
    // >>> _.keys(_): bindAll,bindKey,castArray,chain,chunk,compact,concat,cond,conforms,constant
    // and the _.sortBy() below works fine
    var sorted = _.sortBy(photos, function (o) {
        return o[sort.key];
    });

   // BUT, in the Chrome debugger (at breakpoint)
   console.log(_)      // VM2037:1 Uncaught ReferenceError: _ is not defined(…)

事实上,当我查看main.js 而不是源映射时,我看到了摇树的迹象(?):

        console.log(">>> _.keys(_): " + lodash.keys(lodash).slice(10, 20));
        var sorted = lodash.sortBy(photos, function (o) {
            return o[sort.key];
        });

我的问题似乎出在 Chrome 调试控制台上,但我不知道如何解决它...

【问题讨论】:

  • VM1912:1 Uncaught ReferenceError: VERSION is not defined(…)

标签: typescript ecmascript-6 ionic2 lodash


【解决方案1】:

问题是您在导入中使用了import * as。这不会选择默认值。

使用将导入默认值的语法:

import _ from "lodash"

Here is a link to the documentation

似乎 rollup 尝试使用静态导入来摇树捆绑包。因此,它也需要一个 lodash 依赖项,即 ES6。尝试安装 lodash-es 包,然后导入它:

import _ from "lodash-es"

【讨论】:

  • 稍微好一点,它将lodash 导入为lodash,而不是_
  • 这应该将 lodash 导入为_。你能展示你的代码吗?
  • @michael 很奇怪!我不熟悉汇总,但这绝对应该将_ 绑定到lodash.default。很奇怪。
  • 我不确定——如果我使用 console.log() 语句,它现在似乎可以工作,但它无法从 Chrome 调试器中访问。但我会用 `lodash-es' 尝试你的建议
  • 您不应该在模块内设置的断点处看到_ - 或者至少在源映射内吗?我想更大的问题是,“如何通过typescript/modules/bundlers 有效地使用 Chrome 调试器?”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
  • 2022-01-14
  • 2018-01-10
  • 1970-01-01
  • 2020-03-03
  • 2017-12-10
  • 2021-07-12
相关资源
最近更新 更多