Как правильно настроить babel для использования lodash-es? - PullRequest
0 голосов
/ 17 октября 2018

Мне нужно использовать lodash-es в моем проекте, но я не могу правильно настроить мой babel, он всегда сообщает об ошибках вроде SyntaxError: Unexpected identifier

hello.js

import upperCase from 'lodash-es/upperCase'

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

package.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

Ответы [ 2 ]

0 голосов
/ 28 августа 2019

Адаптировано с https://stackoverflow.com/a/31822668/3563013

require("@babel/register")({
    ignore: [/node_modules\/(?!lodash-es)/],
});
0 голосов
/ 17 октября 2018

babel-node по умолчанию игнорирует каталог node_modules.Что хорошо, иначе это было бы излишне тяжело.Пакеты в node_modules (на данный момент) должны быть в формате commonjs.Вместо использования lodash-es (формат es6) вы должны просто использовать lodash (формат commonjs).Он имеет точно такую ​​же функциональность, единственное отличие - формат, в котором он написан. Подробнее об этом здесь .

Так что настройте babel-node, чтобы игнорировать node-modules/lodash-es (не рекомендуется!) или просто установите lodash с npm install --save lodash, а затем переписайте свой импорт как:

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

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