对于用 ES6/7 编写的库,我想将该库编译(到 ES5)到一个 dist/ 文件夹。我还想为这个库运行测试(用 ES6/7 编写)。
我的开发依赖项如下所示(package.json):
"devDependencies": {
"@babel/cli": "^7.4.4",
"@babel/core": "^7.4.5",
"@babel/preset-env": "^7.4.5",
"@babel/register": "^7.4.4",
"chai": "^4.2.0",
"mocha": "^6.1.4",
"sinon": "^7.3.2"
},
Run Code Online (Sandbox Code Playgroud)
我的构建和测试脚本如下所示 (package.json):
"scripts": {
"test": "mocha --require @babel/register",
"build": "babel src -d dist --presets=@babel/preset-env"
},
Run Code Online (Sandbox Code Playgroud)
跑步npm run build效果很好。dist/ 文件夹中填充了转换后的文件。
跑步npm run test似乎不起作用 - 这是我的问题。
> mocha --require @babel/register
/Users/dro/Repos/lib/node_modules/yargs/yargs.js:1163
else throw err
^
ReferenceError: regeneratorRuntime is not defined
Run Code Online (Sandbox Code Playgroud)
最初我遇到了一个导入错误,通过添加 .babelrc 文件解决了这个错误。
下面是我的 .babelrc 文件内容。
{
"presets": ["@babel/preset-env"]
}
Run Code Online (Sandbox Code Playgroud)
我正在读关于regeneratorRuntime …
我的package.json看起来像:
{
"name": "99-nodetest",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "babel-node --presets env app.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"babel-cli": "^6.26.0",
"babel-preset-env": "latest"
}
}
Run Code Online (Sandbox Code Playgroud)
我想运行的js脚本是app.js. 我无法使用节点app.js直接运行它,因为app.js包含新的语言语法.
因此,我必须按照上面定义的启动脚本,使用npm start通过babel运行它.没问题.
我的问题是如何直接在命令行中运行cmd,可以这样做吗?类似的东西:
npm run babel-node --presets env app.js
ES6,Windows 10 x64,Node.js 8.6.0,Mocha 3.5.3
可以在Mocha测试中使用ES6模块吗?我export和import关键字有问题。
/* eventEmitter.js
*/
/* Event emitter. */
export default class EventEmitter{
constructor(){
const subscriptions = new Map();
Object.defineProperty(this, 'subscriptions', {
enumerable: false,
configurable: false,
get: function(){
return subscriptions;
}
});
}
/* Add the event listener.
* @eventName - the event name.
* @listener - the listener.
*/
addListener(eventName, listener){
if(!eventName || !listener) return false;
else{
if(this.subscriptions.has(eventName)){
const arr = this.subscriptions.get(eventName);
arr.push(listener);
}
else{
const arr = [listener];
this.subscriptions.set(eventName, arr); …Run Code Online (Sandbox Code Playgroud) mocha.js ×2
node.js ×2
npm ×2
babeljs ×1
ecmascript-6 ×1
javascript ×1
npm-cli ×1
transpiler ×1