解决node终端下运行js文件不支持ES6语法


Posted in Javascript onApril 04, 2020

最近写一些简单的测试代码时,为了方便直接在node终端执行发现有些ES6语法不支持,记录一下解决方式

现象

新建class.js文件后添加如下代码

// constructer
class Person {
 constructor(name,age,sex) {
  this.name = name;
  this.age = age;
  this.sex = sex;
 }
 getInfo() {
  return `name:${this.name},age:${this.age},sex:${this.sex}`;
 }

}
var jone = new Person('jone', 18, 'man');
console.log(jone.name);
export default Person;

在终端中运行代码会提示如下错误

解决node终端下运行js文件不支持ES6语法

不识别export关键字,因为node环境中的模块导入导出是CommonJS规范实现的,使用的关键字分别是 require和exports。 ( 其他比较流行的还有AMD方式的requirejs以及CMD方式的seajs )

查看ES6支持的语法

我们可以查看一下node环境下支持的ES6语法
可以先通过node -v 命令查看一下版本,可以看到我本地的版本是10.16.2

解决node终端下运行js文件不支持ES6语法

接着全局安装一下npm包

npm install -g es-checker

安装完成后就可以通过执行es-checker命令查看node的支持率及详情

可以看到如下输出,

解决node终端下运行js文件不支持ES6语法

最末尾显示的是

解决node终端下运行js文件不支持ES6语法

表示不支持模块方法

babel

怎么解决呢,可以通过添加babel命令,将代码转换为被支持的写法

在项目的工程目录下,也就是package.json同级目录下执行

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

其中babel-cli使我们可以在终端中使用babel命令,如同webpack对应的webpack-cli包,而babel-preset-* 是babel转换代码时所依赖的前置规则的插件集合,安装完成后,在同目录下配置使用babel,新建.babelrc文件,文件中输入如下配置

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

其中presets字段里添加我们的转换规则,可以只写前边提到的babel-preset- 对应的关键字作为缩写,plugins中可以配置一些定义转换规则的插件。
配置完成后,就可以在我的终端中用babel对我的代码进行转换了,直接执行babel命令babel class.js 可以看到我们的代码被转换成了ES2015的版本。如下

PS D:\git\study\mytest> babel src/Object/class.js
'use strict';

Object.defineProperty(exports, "__esModule", {
 value: true
});

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

// constructer
var Person = function () {
 function Person(name, age, sex) {
  _classCallCheck(this, Person);

  this.name = name;
  this.age = age;
  this.sex = sex;
 }

 _createClass(Person, [{
  key: 'getInfo',
  value: function getInfo() {
   return 'name:' + this.name + ',age:' + this.age + ',sex:' + this.sex;
  }
 }]);

 return Person;
}();

var jone = new Person('jone', 18, 'man');
console.log(jone.name);
exports.default = Person;

如果要直接在终端中执行呢,可以用如下命令babel-node xxxx,xxxx表示对应的目录及文件

解决node终端下运行js文件不支持ES6语法

这样,我们就可以在终端中执行大部分的ES6代码了,也可以在学习新语法的时候,通过babel转换成老的语法来帮助自己理解原理。

到此这篇关于解决node终端下运行js文件不支持ES6语法的文章就介绍到这了,更多相关解决node终端下运行js文件不支持ES6语法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
js获取变量
Aug 24 Javascript
添加到收藏夹代码(兼容几乎所有的浏览器)
Jan 09 Javascript
标题过长使用javascript按字节截取字符串
Apr 24 Javascript
JavaScript获取图片的原始尺寸以宽度为例
May 04 Javascript
js换图片效果可进行定时操作
Jun 09 Javascript
jquery操作checkbox示例分享
Jul 21 Javascript
jquery siblings获取同辈元素用法实例分析
Jul 25 Javascript
React如何利用相对于根目录进行引用组件详解
Oct 09 Javascript
Vue侧滑菜单组件——DrawerLayout
Dec 18 Javascript
Mint UI实现A-Z字母排序的城市选择列表
Dec 28 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
Jun 11 Javascript
vue实现前端分页完整代码
Jun 17 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 #jQuery
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
Apr 04 #jQuery
vue中使用v-for时为什么不能用index作为key
Apr 04 #Javascript
详解为什么Vue中不要用index作为key(diff算法)
Apr 04 #Javascript
原理深度解析Vue的响应式更新比React快
Apr 04 #Javascript
Vue的data、computed、watch源码浅谈
Apr 04 #Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
Apr 03 #Javascript
You might like
tp5框架内使用tp3.2分页的方法分析
2019/05/05 PHP
php使用event扩展的io复用测试的示例
2020/10/20 PHP
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
2014/12/18 Javascript
JavaScript中的数据类型转换方法小结
2015/10/26 Javascript
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
前端微信支付js代码
2016/07/25 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
js中new一个对象的过程
2017/02/20 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
2018/02/06 Javascript
javascript中的隐式调用
2018/02/10 Javascript
Node.Js生成比特币地址代码解析
2018/04/21 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
2019/09/25 Javascript
jQuery操作事件完整实例分析
2020/01/10 jQuery
vue界面发送表情的实现代码
2020/09/11 Javascript
javascript使用正则表达式实现注册登入校验
2020/09/23 Javascript
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
Win系统PyQt5安装和使用教程
2019/12/25 Python
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
css3实现椭圆轨迹旋转的示例代码
2018/10/29 HTML / CSS
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
职工运动会感言
2014/02/07 职场文书
会计专业自我评价
2014/02/12 职场文书
元旦联欢会感言
2014/03/04 职场文书
教师节演讲稿
2014/05/06 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
大学生党员个人总结
2015/02/13 职场文书
爱国主义主题班会
2015/08/14 职场文书
go select编译期的优化处理逻辑使用场景分析
2021/06/28 Golang