Alex Liang

NodeJS使用ESM Import載入模組

上一篇介紹如何解決CommonJS相對路徑問題。假如你偏好ES6的export/import,從NodeJS 12開始支援實驗性質的解決方法。

二個地方需要修改:

  1. package.json 加入 "type": "module"
  2. 執行程式時加入 --experimental-modules 或修改package.json的start script

以上是不用修改副檔名的方式,否則NodeJS預設只認.mjs的檔案能使用export/import

接下來介紹 export/import 的基本語法

有二種 export 方式: nameddefault, 一個檔案可以有許多 named export, 但只能有一個 default export

1
2
3
// 以下是 named export
export funcA = val => Math.sqrt(val);
export const seed = Math.random();
1
2
// 以下是 default export, 注意結尾不加分號
export default class Calculator { ... }

named export 會強制使用同樣的名稱 import, 而 default export 可用任意名稱輸入, 例如:

1
2
3
4
export default str = 'default'; // module1.js

import a from './module1';
console.info(a); // 'default'

如果一個檔案有許多 named export, 如果要選擇部分物件, 則:

1
2
3
4
5
6
7
8
9
// constant.js
export VALID_TYPES = [...];
export VALID_STATUS = [...];

// app.js, 只輸入 VALID_TYPES
import { VALID_TYPES } from './constant';

// app2.js, 將 VALID_STATUS 改名
import { VALID_STATUS as ALERT_STATUS } from './constant'

reference:

  1. import document
  2. export document