- Published on
Node.js使用ES6 Module
- Authors
- Name
- Eddy Chang
Node.js可以直接使用ES6 module新語法,而不需要透過babel等編譯器,在Node.js 12(2019-04-23發佈) 版本後,支援了新的ECMAScript module(ESM)改進。13版本後可以更容易的使用 ESM 語法。
簡單結論
Node >= v13
選擇下面兩種其一:
- 將 ES modules 檔案的副檔名存為
.mjs
- 加入
{ "type": "module" }
在 package.json 檔案中
Node <= v12
Node 8-12版本,將 ES modules 檔案的副檔名存為 .mjs
,然後以下面的方式來執行:
node --experimental-modules my-app.mjs
註:Node.js 12+ 原生支援 ESM 但需要透過旗標
--experimental-modules
,Node.js 13.2.0+ 原生支援 ESM 不需要透過旗標。
使用 ESM 語法導入 CommonJS 模組
有許多內建的 Node.js 模組為 CommonJS 模組,導入的語法如下:
import * as http from 'http'
import * as fs from 'fs'
import * as path from 'path'
import * as readline from 'readline'
import * as os from 'os'
你也可以導入部份的函式或變數:
import { fileURLToPath } from 'url'
import { dirname } from 'path'
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
如果還想要使用 CommonJS 模組,此時應儲存為副檔名.cjs
,如下範例:
// common.cjs
module.exports = {
foo: 1,
}
然後在自己的檔案中用 import 語法來導入:
// test.js
import common from './common.cjs'
console.log(common) // {foo: 1}