module.exports、exports、export default、export、require、import

在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文件。

與君共勉:再牛逼的夢想,也抵不住傻逼般的堅持!

發佈了84 篇原創文章 · 獲贊 64 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章