解决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 相关文章推荐
jQuery 1.3 和 Validation 验证插件1.5.1
Jul 09 Javascript
基于javascipt-dom编程 table对象的使用
Apr 22 Javascript
JavaScript:Div层拖动效果实例代码
Aug 06 Javascript
js中的this关键字详解
Sep 25 Javascript
Javascript实现真实字符串剩余字数提示的实例代码
Oct 22 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
Jun 24 Javascript
JavaScript获取function所有参数名的方法
Oct 30 Javascript
javascript基本数据类型及类型检测常用方法小结
Dec 14 Javascript
layui前端框架之table表数据的刷新方法
Aug 17 Javascript
详解微信小程序调用支付接口支付
Apr 28 Javascript
JS开发常用工具函数(小结)
Jul 04 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
Jul 25 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项目的方法
2006/10/09 PHP
PHP 反射机制实现动态代理的代码
2008/10/22 PHP
PHP语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
关于尾递归的使用详解
2013/05/02 PHP
深入PHP异步执行的详解
2013/06/03 PHP
php实现可逆加密的方法
2015/08/11 PHP
深入理解PHP之OpCode原理详解
2016/06/01 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
基于jQuery的树控件实现代码(asp.net+json)
2010/07/11 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
jQuery之折叠面板的深入解析
2013/06/19 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
jQuery不兼容input的change事件问题解决过程
2014/12/05 Javascript
一个极为简单的requirejs实现方法
2016/10/20 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
vue 项目常用加载器及配置详解
2018/01/22 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
GOJS+VUE实现流程图效果
2018/12/01 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
在Pycharm中执行scrapy命令的方法
2019/01/16 Python
PyTorch的深度学习入门之PyTorch安装和配置
2019/06/27 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
Python3.7+tkinter实现查询界面功能
2019/12/24 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
Python本地及虚拟解释器配置过程解析
2020/10/13 Python
英国在线药房:Express Chemist
2019/03/28 全球购物
八一建军节感言
2014/02/28 职场文书
建筑工地大门标语
2014/06/18 职场文书
政风行风评议心得体会
2014/10/21 职场文书
售房协议书范本2014
2014/10/23 职场文书