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 ?

32
demandé sur Plusb Preco 2015-05-22 02:58:19

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
47
répondu loganfsmyth 2015-11-16 04:47:03

, Vous pouvez spécifier source transforme dans le package.json dans le browserify.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"
  ]
},

Lira la configuration et exécutera toute transformation donnée automatiquement.

5
répondu mate64 2015-08-10 21:14:16

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"
  },
4
répondu Sean Anderson 2016-03-07 18:42:26