解决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弹出层之1:JQuery.Boxy (二)
Oct 06 Javascript
JavaScript中使用concat()方法拼接字符串的教程
Jun 06 Javascript
JavaScript中的prototype原型学习指南
May 09 Javascript
完全深入学习Bootstrap表单
Nov 28 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
Dec 08 Javascript
Bootstrap基本模板的使用和理解1
Dec 14 Javascript
使用clipboard.js实现复制功能的示例代码
Oct 16 Javascript
Vue.js中对css的操作(修改)具体方式详解
Oct 30 Javascript
javascript实现简易聊天室
Jul 12 Javascript
javascript面向对象三大特征之继承实例详解
Jul 24 Javascript
js实现一款简单踩白块小游戏(曾经很火)
Dec 02 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
Jan 08 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
php Ajax乱码
2008/04/09 PHP
PHP中date()日期函数有关参数整理
2011/07/19 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
window.name代替cookie的实现代码
2010/11/28 Javascript
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
javaScript复制功能调用实现方案
2012/12/13 Javascript
jquery实现一个简单的表单验证实例
2016/03/30 Javascript
快速解决js开发下拉框中blur与click冲突
2016/10/10 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
JSON基本语法及与JavaScript的异同实例分析
2019/01/04 Javascript
layui清除radio的选中状态实例
2019/11/14 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
python获取网页状态码示例
2014/03/30 Python
Python和php通信乱码问题解决方法
2014/04/15 Python
Python循环语句中else的用法总结
2016/09/11 Python
为什么入门大数据选择Python而不是Java?
2018/03/07 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
浅谈python标准库--functools.partial
2019/03/13 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
python实现猜单词游戏
2020/05/22 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
迪斯尼假期(欧洲、中东及非洲):Disney Holidays EMEA
2021/02/15 全球购物
历史系自荐信范文
2013/12/24 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
禁烟标语大全
2014/06/11 职场文书
住房租房协议书
2014/08/20 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
刑事代理授权委托书
2014/09/17 职场文书
努力工作保证书
2015/02/28 职场文书
行政诉讼答辩状
2015/05/21 职场文书
golang interface判断为空nil的实现代码
2021/04/24 Golang
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫