【发布时间】:2016-05-04 14:49:56
【问题描述】:
其他相关问题中提供的解决方案,例如在 .babelrc 中包含正确的预设(es2015),已经在我的项目中实现。
我有两个项目(我们称它们为 A 和 B),它们都使用 ES6 模块语法。在项目 A 中,我正在导入通过 npm 安装并位于 node_modules 文件夹中的项目 B。当我为项目 A 运行测试套件时,出现错误:
SyntaxError: 意外的令牌导入
前面是来自项目 B 的所谓错误代码行:
(function (exports, require, module, __filename, __dirname) { import createBrowserHistory from 'history/lib/createBrowserHistory';
iife 似乎与 npm 或可能与 babel 相关,因为我的源文件仅包含“import createBrowserHistory from 'history/lib/createBrowserHistory'; 项目 B 的测试套件中的单元测试运行良好,如果我将项目 B 删除为来自项目 A 的依赖项,然后我的测试套件(仍然使用 es6 导入内部项目模块)工作得很好。
全栈跟踪:
SyntaxError: Unexpected token import
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:374:25)
at Module._extensions..js (module.js:405:10)
at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:138:7)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (actionCreators.js:4:17)
at Module._compile (module.js:398:26)
at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5)
at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/ProjectA/src/components/core/wrapper/wrapper.js:28:23)
at Module._compile (module.js:398:26)
at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5)
at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (/ProjectA/src/components/core/wrapper/wrapperSpec.js:15:16)
at Module._compile (module.js:398:26)
at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5)
at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at /ProjectA/node_modules/mocha/lib/mocha.js:219:27
at Array.forEach (native)
at Mocha.loadFiles (/ProjectA/node_modules/mocha/lib/mocha.js:216:14)
at Mocha.run (/ProjectA/node_modules/mocha/lib/mocha.js:468:10)
at Object.<anonymous> (/ProjectA/node_modules/mocha/bin/_mocha:403:18)
at Module._compile (module.js:398:26)
at Object.Module._extensions..js (module.js:405:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Function.Module.runMain (module.js:430:10)
at startup (node.js:141:18)
at node.js:980:3
这是我来自 package.json 的测试命令:
"test": "mocha --compilers js:babel-core/register '+(test|src)/**/*Spec.js'"
这篇 StackOverflow 帖子类似,但没有为我使用命令行提供解决方案: import a module from node_modules with babel but failed
【问题讨论】:
-
如果你在 npm 上分发一个模块,你应该只分发该模块的转译版本。
-
这个项目非常轻量级。它主要供我自己使用,或者其他人,如果他们有一个可以支持它的蒸腾过程。我正在尝试在这些依赖项中实现“vanilla es6”。
-
我想你忘记在 package.json 中配置 babel。将它们添加到你的 package.json "babel": { "presets": ["es2015"] }
-
注意:according to the documentation
--compilers不是必须的,应该使用--require babel-register代替:“如果你的 ES6 模块有扩展名 .js,你可以 npm install --save-dev babel-register并使用 mocha --require babel-register; --compilers 只有在需要指定文件扩展名时才需要。" -
终于我能够使用
"babel":{"presets": ["es2015"]}让它工作了,这是我错过的最后一件事!
标签: node.js npm syntax-error mocha.js babeljs