代码之家  ›  专栏  ›  技术社区  ›  Freewind thk

如何正确配置babel以使用lodash es?

  •  1
  • Freewind thk  · 技术社区  · 6 年前

    lodash-es 在我的项目中,但是我不能正确配置我的babel,它总是报告如下错误 SyntaxError: Unexpected identifier

    你好,js

    import upperCase from 'lodash-es/upperCase'
    
    console.log(upperCase('lodash-es'));
    

    {
      "scripts": {
        "demo": "babel-node hello"
      },
      "devDependencies": {
        "@babel/cli": "^7.0.0",
        "@babel/core": "^7.0.0",
        "@babel/node": "^7.0.0",
        "@babel/preset-env": "^7.0.0"
      },
      "dependencies": {
        "lodash-es": "4.17.11"
      }
    }
    

    巴贝尔

    {
      "presets": [
        "@babel/preset-env"
      ]
    }
    

    运行时 babel-node hello

    > /javascript-babel-node-use-lodash-es-issue-demo
    > babel-node hello
    
    /Users/freewind/workspace/javascript-babel-node-use-lodash-es-issue-demo/node_modules/lodash-es/upperCase.js:1
    (function (exports, require, module, __filename, __dirname) { import createCompounder from './_createCompounder.js';
                                                                         ^^^^^^^^^^^^^^^^
    
    SyntaxError: Unexpected identifier
        at new Script (vm.js:79:7)
        at createScript (vm.js:251:10)
        at Object.runInThisContext (vm.js:303:10)
    

    我还为此问题设置了一个小演示,如果需要,可以克隆并尝试: https://github.com/freewind-demos/javascript-babel-node-use-lodash-es-issue-demo

    1 回复  |  直到 6 年前
        1
  •  0
  •   axm__    6 年前

    babel-node 默认情况下忽略 node_modules 目录。这是一件好事,否则它将是不必要的沉重。包装 节点模块 commonjs 格式。而不是使用 lodash-es (es6格式)您应该只使用 lodash (commonjs格式)。它具有完全相同的功能,唯一的区别是它所用的格式。关于这个的更多信息 here

    所以要么调整一下 巴别塔节点 node-modules/lodash-es (不推荐!)或者直接安装 矿脉 npm install --save lodash 然后重写导入,如下所示:

    import upperCase from 'lodash/upperCase' // instead of lodash-es
    
    console.log(upperCase('lodash-es'));
    
        2
  •  0
  •   McKabue    6 年前

    改编自 https://stackoverflow.com/a/31822668/3563013

    require("@babel/register")({
        ignore: [/node_modules\/(?!lodash-es)/],
    });