Подтвердить что ты не робот

Babelify выдает ParseError при импорте модуля из node_modules

Я работаю с Babelify и Browserify. Кроме того, я использую функции модуля стиля ES6 с помощью модульной системы node.

Я хотел бы поместить все мои собственные модули в node_modules/libs.

Например:

test.js в node_modules/libs

export default () => {
  console.log('Hello');
};

main.js (будет скомпилирован до bundle.js)

import test from 'libs/test';

test();

После этого я скомпилировал приведенные выше коды к bundle.js с помощью этой команды:

browserify -t babelify main.js -o bundle.js

Но, к сожалению, у меня есть некоторая ошибка:

export default () => {
^

ParseError: 'import' and 'export' may appear only with 'sourceType: module'

Структура каталогов:

[test]
  `-- node_modules
  │ `-- libs
  │  `-- test.js
  `-- main.js

Но, когда собственные модули не находятся в node_modules следующим образом:

[test]
  `-- libs
  │ `-- test.js
  `-- main.js

Тогда он отлично работает. Как я могу использовать модули стиля ES6 с Babelify в node_modules?

4b9b3361

Ответ 1

Таким образом, преобразование Browserify преобразует работу, трансформирует только эффект непосредственно в подключаемом модуле.

Если вы хотите, чтобы модуль в node_modules имел преобразование, вам нужно добавить package.json к этому модулю и добавить babelify в качестве преобразования для этого модуля. например.

"browserify": {
  "transform": [
    "babelify"
  ]
},

внутри вашего package.json плюс babelify, поскольку зависимость сообщит browserify о запуске преобразования babelify в любом файле внутри этого модуля.

Наличие libs является папкой в ​​ node_modules, однако, вероятно, это плохая идея. Обычно эта папка будет иметь в ней настоящие автономные модули. Я бы сказал, что если папка не может быть взята и повторно использована в другом месте, то она не должна быть в node_modules.

Update

В выпуске Babel v6, который был недавно выпущен, вам также нужно будет указать, какие преобразования вы хотели бы выполнить в своем коде. Для этого я бы рекомендовал создать файл .babelrc в корневом каталоге для настройки Babel.

{
  "presets": ["es2015"]
}

и

npm install --save-dev babel-preset-es2015

Ответ 2

Вы можете указать исходные преобразования в package.json в browserify.transform. Существует больше информации о том, как исходные преобразования работают в package.json на module-deps риая.

Источник: https://github.com/substack/node-browserify#browserifytransform


Пример (my_batman_project/node_modules/test_robin_module/package.json):

"browserify": {
  "transform": [
    "babelify"
  ]
},

будет читать конфигурацию и автоматически выполнять любые заданные преобразования.

Ответ 3

Я считаю, что эта проблема связана с ESLint.

ESLint 2.0 изменил то, что ему требуется для интерпретации модулей ES6. http://eslint.org/docs/user-guide/migrating-to-2.0.0

Вам нужно изменить свой параметр конфигурации ecmaFeatures и заменить его на что-то вроде:

  "parserOptions": {
    "ecmaVersion": 6,
    "sourceType": "module"
  },