Babelify lance ParseError sur Importer un module à partir de modules de noeud
je travaille avec Babelify
et Browserify . De plus, j'utilise les fonctionnalités du module de style ES6 par le système de module de noeud.
je voudrais mettre tous mes propres modules dans node_modules/libs
.
par exemple:
test.js
dans node_modules/libs
export default () => {
console.log('Hello');
};
main.js
(sera compilé en bundle.js
)
import test from 'libs/test';
test();
après ça, J'ai compilé les codes ci-dessus en bundle.js
avec cette commande:
browserify -t babelify main.js -o bundle.js
Mais malheureusement, j'ai une erreur:
export default () => {
^
ParseError: 'import' and 'export' may appear only with 'sourceType: module'
structure du répertoire:
[test]
`-- node_modules
│ `-- libs
│ `-- test.js
`-- main.js
mais, lorsque ses propres modules ne sont pas dans node_modules
comme ceci:
[test]
`-- libs
│ `-- test.js
`-- main.js
alors, ça marche très bien. Comment puis-je utiliser les modules de style ES6 avec babelify
dans node_modules
?
3 réponses
C'est ainsi que Browserify transforme fonctionne, les transformations n'ont qu'un effet directement dans le module référencé.
Si vous voulez un module dans node_modules avoir une transformation, vous devez ajouter un package.json
à ce module et d'ajouter babelify
comme une transformation de ce module. par exemple
"browserify": {
"transform": [
"babelify"
]
},
à l'intérieur de votre package.json
plus babelify
comme une dépendance va dire browserify
pour exécuter la transformation babelify
sur n'importe quel fichier de ce module.
Avoir libs
être un dossier node_modules est cependant probablement une mauvaise idée. En général, ce dossier contient de vrais modules autonomes. Je dirais généralement que si le dossier ne peut pas être pris et réutilisé ailleurs, alors il ne devrait pas être dans node_modules.
mise à Jour
Pour Babel v6, qui a été récemment publié, vous devez également spécifier les transformations que vous souhaitez effectuer sur votre code. Pour cela, je recommande la création d'un fichier .babelrc
dans votre répertoire racine pour configurer Babel.
{
"presets": ["es2015"]
}
et
npm install --save-dev babel-preset-es2015
, Vous pouvez spécifier source transforme dans le
package.json
dans lebrowserify.transform
sur le terrain. Il ya plus d'informations sur la façon dont la source transforme le travail en paquet.JSON sur le module - deps readme .
Source: https://github.com/substack/node-browserify#browserifytransform
exemple ( my_batman_project/node_modules/test_robin_module/package.json
):
"browserify": {
"transform": [
"babelify"
]
},
browserify Lira la configuration et exécutera toute transformation donnée automatiquement.
je crois que cette question Est en fait liée à L'ESLint.
ESLint 2.0 a changé ce qui est nécessaire pour qu'il interprète les modules ES6. http://eslint.org/docs/user-guide/migrating-to-2.0.0
vous devrez modifier votre option de configuration ecmaFeatures
et la remplacer par quelque chose comme:
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module"
},