Невозможно загрузить модуль react в качестве модуля узла
У меня есть компонент react в пути
src/components/test
import React from 'react';
import ReactDom from 'react-dom';
class TestComp extends React.Component {}
export default TestComp;
Я показываю компонент в индексе.js из path
src/index.js
import TestComp from './components/test';
export {
TestComp
};
Я добавил main
в пакет.json as "main": "src/index.js"
Я опубликовал пакет npm test-comp
вышеуказанного приложения и использую его в другом приложении.
main.js
import {TestComp} from 'test-comp';
Я использую grunt-browserify в этом приложении со следующими опциями.
options: {
"transform": [
[
"babelify",
{
"presets": [
"es2015",
"react",
"stage-0"
]
}
]
],
browserifyOptions: {
debug: true,
extensions: ['.js', '.jsx'],
entries: ['main.js']
}
}
При запуске grunt browserify
появляется следующая ошибка.
>> import TestComp from './components/test';
>> ^
>> ParseError: 'import' and 'export' may appear only with 'sourceType: module'
Warning: Error running grunt-browserify. Use --force to continue.
Это вероятно, не понимая путь, упомянутый в узле модуля или отказываясь понимать то же самое, что линтинг. Я даже попытался добавить следующее .eslintrc но не повезло
{
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module"
},
"env": {
"browser": true,
"es6": true
},
"ecmaFeatures": {
"modules": true
}
}
Я попробовал большинство ответов SO, связанных с этой ошибкой. Но все равно застрял на том же месте.
EDIT Я могу просматривать первый модуль напрямую с почти аналогичной конфигурацией. Получение этой ошибки при загрузке первого модуля в качестве зависимого узла в другом приложении, как описано выше.
1 ответ:
Итак, вы написали модуль
test-comp
в ES6, используяimport
иexport
, а записьmain
вpackage.json
вtest-comp
ссылается наsrc/index.js
.Ответ заключается в том, что преобразования browserify не применяются к каждому требуемому модулю. Они применимы только к непосредственному проекту, а не к зависимостям проекта.
Если вы хотите использовать модуль, использующий синтаксис ES6 в browserify, вам потребуется либо
- добавьте предпубликованный сценарий в
test-comp
, который транспонирует его в ES5, и измените записьmain
test-comp
для ссылки на эту версию ES5, а не на версию ES6- Добавьте
babelify
как зависимостьtest-comp
и добавьтеbabelify
как преобразование browserify в записи пакетаbrowserify , как описано в babelify.