Babelify lanza ParseError al importar un module de node_modules

Estoy trabajando con Babelify y Browserify . Además, estoy usando las características del module de estilo ES6 por sistema de module de nodo.

Me gustaría poner todos mis propios modules en node_modules/libs .

Por ejemplo:

test.js en node_modules/libs

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

main.js (se comstackrá en bundle.js )

 import test from 'libs/test'; test(); 

Después de eso, he comstackdo los códigos anteriores para bundle.js con este command:

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

Pero desafortunadamente, tengo un error:

 export default () => { ^ ParseError: 'import' and 'export' may appear only with 'sourceType: module' 

Estructura de directorys:

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

Pero, cuando los modules propios no están en node_modules como este:

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

Entonces, funciona bien. ¿Cómo puedo usar los modules de estilo ES6 con babelify en node_modules ?

Así es como funciona Browserify, las transformaciones solo tienen un efecto directamente en el module al que se hace reference.

Si desea que un module en node_modules tenga una transformación, deberá agregar un package.json a ese module y agregar babelify como una transformación para ese module también. p.ej

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

dentro de su package.json babelify plus babelify como una dependencia le dirá a browserify que ejecute la transformación babelify en cualquier file dentro de ese module.

Sin embargo, tener libs como una carpeta en node_modules es probablemente una mala idea. En general, esa carpeta tendría verdaderos modules autónomos en ella. En general, diría que si la carpeta no puede tomarse y reutilizarse en otro lugar, entonces no debería estar en node_modules.

Actualizar

Para Babel v6, que se lanzó recientemente, también deberá especificar qué transformaciones le gustaría realizar en su código. Para eso, recomendaría crear un file .babelrc en su directory raíz para configurar Babel.

 { "presets": ["es2015"] } 

y

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

Puede especificar transformaciones de origen en el package.json en el campo browserify.transform . Hay más información sobre cómo funcionan las transformaciones de origen en package.json en el file-deme readme .

Fuente: https://github.com/substack/node-browserify#browserifytransform


Ejemplo ( my_batman_project/node_modules/test_robin_module/package.json ):

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

browserify leerá la configuration y realizará cualquier transformación dada automáticamente.

Creo que este problema en realidad está relacionado con ESLint.

ESLint 2.0 cambió lo que se requiere para interpretar los modules de ES6. http://eslint.org/docs/user-guide/migrating-to-2.0.0

Deberá modificar su opción de configuration ecmaFeatures y replacela por algo como:

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