使用babel,转换ES6+代码运行
我们知道使用node直接运行ES6+语法的js代码会报如下的错误
import calculator from './calculator';
^^^^^^SyntaxError: Unexpected token import
at createScript (vm.js:80:10)
import
语法无法识别我们可以通过配置babel,安装对应的转换插件,然后就可以运行了
上代码:
我自己写了一个类似
Promise
的实现(只有then方法)://CustomPromise.js
class CustomPromise {
// promiseFunc: function(resolve, reject)
constructor(promiseFunc) {
this.resolve = this.resolve.bind(this);
this.reject = this.reject.bind(this);
this.then = this.then.bind(this);
this.successCallbacks = [];
promiseFunc(this.resolve, this.reject);
}resolve(args) {
this.fullfill = true;
this.result = args;
this.successCallbacks.forEach(callback => {
callback(this.result);
});
}reject(error) {
// TODO
}then(callback) {
this.successCallbacks.push(callback);
if (this.fullfill) { // 调用当次就行了
callback(this.result);
}return this;
}
}module.exports = CustomPromise;
然后在index.js中调用, 由于promise是异步调用,我们需要让代码挂住,这里使用一个server
import CustomPromise from './CustomPromise';
import http from 'http';
function sleep(timeout) {
return new CustomPromise(function (resolve, reject) {
setTimeout(function () {
resolve();
}, timeout*1000);
})
}var a = sleep(3).then(
()=>console.log('trigger 1')
).then(
()=>console.log('trigger 2')
);
//挂住程序
http.createServer(function(request, response){
response.writeHead(200, { 'Content-Type': 'text-plain' });
response.end('Hello World\n');
a.then(()=>console.log('recv request'));
}).listen(8124);
好了, 下面我们配置babel,安装对应的插件
根目录下创建
.babelrc
文件,配置如下{
"presets": [
"latest",
"env"
],
"plugins": [],
"sourceMaps": true,
"retainLines": true
}
安装插件
npm i babel-preset-latest --save-dev
npm i babel-preset-env --save-dev
【使用babel,转换ES6+代码运行】现在我们用node执行,还是会报错
node index.js
/Users/xxx/Documents/temp/babel-blog/index.js:5
import CustomPromise from './CustomPromise';
^^^^^^SyntaxError: Unexpected token import
我们可以使用babel-node命令来执行,首先安装babel-cli
npm i babel-cli --save-dev
ok, 这样子我们就可以使用babel-node命令运行了,如下
$ npx babel-node index.js
trigger 1
trigger 2
但是这样我们依然无法用node来调试啊,不能使用如下命令, 因为还是会报错
node --inspect-brk index.js
其实最新版本,如果想要调试ES6 代码, 有一个要求 调试的入口文件必须是ES5, 我们修改index.js
//不使用import
const CustomPromise = require('./CustomPromise')
const http = require('http')function sleep(timeout) {
return new CustomPromise(function (resolve, reject) {
setTimeout(function () {
resolve();
}, timeout*1000);
})
}var a = sleep(3).then(
()=>console.log('trigger 1')
).then(
()=>console.log('trigger 2')
);
//挂住程序
http.createServer(function(request, response){
response.writeHead(200, { 'Content-Type': 'text-plain' });
response.end('Hello World\n');
a.then(()=>console.log('recv request'));
}).listen(8124);
这样就能使用node --inspect-brk index.js了, 然后访问chrome://inspect 开始调试
文章图片
屏幕快照 2018-07-28 22.06.02.png
推荐阅读
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- 一起来学习C语言的字符串转换函数
- iOS中的Block
- Linux下面如何查看tomcat已经使用多少线程
- 使用composer自动加载类文件
- 视频转换器哪种好用()