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
?
Ответы
Ответ 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"
]
},
browserify будет читать конфигурацию и автоматически выполнять любые заданные преобразования.
Ответ 3
Я считаю, что эта проблема связана с ESLint.
ESLint 2.0 изменил то, что ему требуется для интерпретации модулей ES6. http://eslint.org/docs/user-guide/migrating-to-2.0.0
Вам нужно изменить свой параметр конфигурации ecmaFeatures
и заменить его на что-то вроде:
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module"
},