4

我需要lodash-es在我的项目中使用,但是我无法正确配置我的 babel,它总是报告错误,例如SyntaxError: Unexpected identifier

你好.js

import upperCase from 'lodash-es/upperCase'

console.log(upperCase('lodash-es'));

包.json

{
  "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"
  }
}

.babelrc

{
  "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

4

2 回答 2

2

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

require("@babel/register")({
    ignore: [/node_modules\/(?!lodash-es)/],
});
于 2019-08-28T08:45:35.370 回答
-1

babel-node默认情况下忽略node_modules目录。这是一件好事,否则它会不必要地沉重。中的包node_modules(目前)预计将采用commonjs格式。而不是使用lodash-es(es6 格式),您应该只使用lodash(commonjs 格式)。它具有完全相同的功能,唯一的区别是它的编写格式。有关此的更多信息,请点击此处

因此,要么调整babel-node为 unignore node-modules/lodash-es(不推荐!),要么只是安装lodashnpm install --save lodash然后重写你的导入,如:

import upperCase from 'lodash/upperCase' // instead of lodash-es

console.log(upperCase('lodash-es'));
于 2018-10-17T11:17:34.927 回答