在es5中,用 module.exports 和 exports 導出模塊,用 require 導入模塊。
在es6中,新增 export default 和 export 導出模塊,用 import 導入模塊。
一般的,module.exports 和 exports 與 require 對應。export default 和 export 與 import 對應。
也就是說,用 module.exports 和 exports 導出的模塊,用 require 導入;用 export default 和 export 導出的模塊,用 import 導入。
當然,這也不是絕對的。如果開發環境支持es6語法,用es5的 module.exports 和 exports 導出的模塊,可以使用es6的 import 導入;用es6的 export default 和 export 導出的模塊,可以使用 es5 的 require 導入。
注意:Node.js中未實現對es6中 export default 和 export 這兩個關鍵字的支持。
原因:Node.js是CommonJS規範的實現,CommonJS規範使用require引入模塊,使用module.exports導出模塊,
而 import 和 export (包括 export default 和 export)是es6的新特性,CommonJS模塊規範和ES6模塊規範完全是兩種不同的概念。
本機node版本爲 v10.6.0
我們可以來測試一下, import 在Node.js環境中的運行情況,新建index.js文件,輸入如下代碼,運行node index.js命令:
import fs from 'fs'
console.log(fs)
報錯如下:語法錯誤:意外的標識符
(function (exports, require, module, __filename, __dirname) { import fs from 'fs'
^^
SyntaxError: Unexpected identifier
同理:測試 export 在Node.js環境中的運行情況:
export const a = 'ceshi'
console.log(a)
報錯如下:語法錯誤:意外的關鍵字export
(function (exports, require, module, __filename, __dirname) { export const a = 'ceshi'
^^^^^^
SyntaxError: Unexpected token export
那麼,如何讓 export 和 import 這兩個es6新特性能在Node.js環境中使用呢?
噔噔噔噔~~~ 可以使用Babel代碼編譯庫來解決哈!
初始化 package.json 配置文件
npm init
安裝 Babel 插件
npm i babel-cli babel-preset-env -D
新建 .babelrc 配置文件,建在項目根目錄哈
{
"presets": [
[
"env",
{
"targets": {
"node": "current"
}
}
]
]
}
配置啓動命令,在 package.json 配置文件中添加dev命令
"scripts": {
"dev": "babel-node index"
}
執行命令,這樣就不會報錯啦!
npm run dev
注意:若想在命令行直接運行命令 babel-node index 會報錯的,這種情況下需將babel-cli插件安裝到全局,才能使用babel-node命令。
npm install babel-cli -g
擴展:nodemon監測項目文件變化
nodemon會監測項目中所有的文件,一旦發現文件有改動,nodemon會自動重啓應用。
安裝 nodemon 插件
npm i nodemon -D
修改dev命令
"scripts": {
"dev": "nodemon -w index.js --exec \"babel-node index.js --presets env\""
}
使用 nodemon 監控 index.js文件 的變化,發生變化時來執行 babel-node命令 編譯 index.js文件。
與君共勉:再牛逼的夢想,也抵不住傻逼般的堅持!