解决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 相关文章推荐
加速IE的Javascript document输出的方法
Dec 02 Javascript
JavaScript禁止页面操作的示例代码
Dec 17 Javascript
jQuery中$.each()函数的用法引申实例
May 12 Javascript
JS封装的自动创建表格的实现代码
Jun 15 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
Oct 10 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
Sep 04 Javascript
Angular17之Angular自定义指令详解
Jan 21 Javascript
深入Vue-Router路由嵌套理解
Aug 13 Javascript
小程序实现选择题选择效果
Nov 04 Javascript
详解vue配置后台接口方式
Mar 29 Javascript
JavaScript 中的无穷数(Infinity)详解
Feb 13 Javascript
jQuery实现计算器功能
Oct 19 jQuery
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合并数组中相同元素的方法
2014/11/13 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
2017/05/24 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
js 表格隔行颜色
2009/12/02 Javascript
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
2016/01/05 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
小程序hover-class点击态效果实现
2019/02/26 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
python用match()函数爬数据方法详解
2019/07/23 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
Python tkinter模版代码实例
2020/02/05 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
初中生三年学习生活的自我评价
2013/11/03 职场文书
机械专业毕业生推荐信范文
2013/11/25 职场文书
商务英语专业求职信范文
2014/01/28 职场文书
数学系个人求职信范文
2014/01/30 职场文书
《去年的树》教学反思
2014/04/11 职场文书
竞选班干部的演讲稿
2014/04/24 职场文书
2014中考励志标语
2014/06/05 职场文书
详解Spring Boot使用系统参数表提升系统的灵活性
2021/06/30 Java/Android
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫