解决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 相关文章推荐
javascript实现的基于金山词霸网络翻译的代码
Jan 15 Javascript
拥抱模块化的JavaScript
Mar 07 Javascript
13个PHP函数超实用
Oct 21 Javascript
jQuery添加删除DOM元素方法详解
Jan 18 Javascript
easyui validatebox验证
Apr 29 Javascript
jQuery获取多种input值的简单实现方法
Jun 20 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
Nov 24 Javascript
vue2.0父子组件及非父子组件之间的通信方法
Jan 21 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
Jul 19 Javascript
js模块加载方式浅析
Aug 12 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
Mar 05 Javascript
解决vue+elementui项目打包后样式变化问题
Aug 03 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 SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
php自定义截取中文字符串-utf8版
2017/02/27 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
总结一些js自定义的函数
2006/08/05 Javascript
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
js的写法基础分析
2011/01/17 Javascript
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
javascript中有趣的反柯里化深入分析
2012/12/05 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
JS中操作JSON总结
2020/12/06 Javascript
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
BootStrap便签页的简单应用
2017/01/06 Javascript
详解Webpack+Babel+React开发环境的搭建的方法步骤
2018/01/09 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
Python下线程之间的共享和释放示例
2015/05/04 Python
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
Python过滤序列元素的方法
2020/07/31 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
美国正版电视节目和电影在线观看:Hulu
2018/05/24 全球购物
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
时尚休闲吧创业计划书
2014/01/25 职场文书
电子商务专业求职信
2014/03/08 职场文书
渠道运营商合作协议书范本
2014/10/06 职场文书
培训讲师开场白
2015/06/01 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书
关于车尾的标语大全
2015/08/11 职场文书
小程序教您怎样你零成本推广获取数万用户的方法
2019/07/30 职场文书