解決node終端下運行js文件不支持ES6語法
最近寫一些簡單的測試代碼時,為了方便直接在node終端執(zhí)行發(fā)現(xiàn)有些ES6語法不支持,記錄一下解決方式
現(xiàn)象
新建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;
在終端中運行代碼會提示如下錯誤
不識別export關鍵字,因為node環(huán)境中的模塊導入導出是CommonJS規(guī)范實現(xiàn)的,使用的關鍵字分別是 require和exports。 ( 其他比較流行的還有AMD方式的requirejs以及CMD方式的seajs )
查看ES6支持的語法
我們可以查看一下node環(huán)境下支持的ES6語法
可以先通過node -v
命令查看一下版本,可以看到我本地的版本是10.16.2
接著全局安裝一下npm包
npm install -g es-checker
安裝完成后就可以通過執(zhí)行es-checker
命令查看node的支持率及詳情
可以看到如下輸出,
最末尾顯示的是
表示不支持模塊方法
babel
怎么解決呢,可以通過添加babel命令,將代碼轉換為被支持的寫法
在項目的工程目錄下,也就是package.json同級目錄下執(zhí)行
npm install --save-dev babel-cli babel-preset-es2015 babel-preset-es2017
其中babel-cli使我們可以在終端中使用babel命令,如同webpack對應的webpack-cli包,而babel-preset-* 是babel轉換代碼時所依賴的前置規(guī)則的插件集合,安裝完成后,在同目錄下配置使用babel,新建.babelrc文件,文件中輸入如下配置
npm install --save-dev babel-cli babel-preset-es2015 babel-preset-es2017
其中presets字段里添加我們的轉換規(guī)則,可以只寫前邊提到的babel-preset- 中 對應的關鍵字作為縮寫,plugins中可以配置一些定義轉換規(guī)則的插件。
配置完成后,就可以在我的終端中用babel對我的代碼進行轉換了,直接執(zhí)行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;
如果要直接在終端中執(zhí)行呢,可以用如下命令babel-node xxxx
,xxxx表示對應的目錄及文件
這樣,我們就可以在終端中執(zhí)行大部分的ES6代碼了,也可以在學習新語法的時候,通過babel轉換成老的語法來幫助自己理解原理。
到此這篇關于解決node終端下運行js文件不支持ES6語法的文章就介紹到這了,更多相關解決node終端下運行js文件不支持ES6語法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Nodejs使用express連接數(shù)據(jù)庫mongoose的示例
數(shù)據(jù)庫并進行操作通常需要使用第三方庫,其中最流行的是mongoose,本文主要介紹了Nodejs使用express連接數(shù)據(jù)庫mongoose的示例,具有一定的參考價值,感興趣的可以了解一下2024-06-06利用nodejs監(jiān)控文件變化并使用sftp上傳到服務器
這篇文章主要介紹了利用nodejs監(jiān)控文件變化并使用sftp上傳到服務器的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-02-02node.js抓取并分析網(wǎng)頁內容有無特殊內容的js文件
nodejs獲取網(wǎng)頁內容綁定data事件,獲取到的數(shù)據(jù)會分幾次相應,如果想全局內容匹配,需要等待請求結束,在end結束事件里把累積起來的全局數(shù)據(jù)進行操作,本文給大家介紹node.js抓取并分析網(wǎng)頁內容有無特殊內容的js文件,需要的朋友參考下2015-11-11Node.js實現(xiàn)兼容IE789的文件上傳進度條
這篇文章給大家介紹了如何實現(xiàn)兼容IE789的文件上傳進度條,如果你的工作用過上傳圖片或上傳大文件啥的,一般在IE低版本瀏覽器里,會切換到用flash解決,可是有些人肯定不會為了老舊IE的進度條而去學flash,那么下面來一起看看吧。2016-09-09Node使用Selenium進行前端自動化操作的代碼實現(xiàn)
這篇文章主要介紹了Node使用Selenium進行前端自動化操作的代碼實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10Node.js如何響應Ajax的POST請求并且保存為JSON文件詳解
這篇文章主要介紹了關于Node.js是如何響應Ajax的POST請求并且保存為JSON文件的相關資料,文中介紹的很詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-03-03node.js的http.createServer過程深入解析
這篇文章主要給大家介紹了關于node.js的http.createServer過程的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用node.js具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-06-06