Saat mengerjakan template awal saya untuk aplikasi Electron, saya memutuskan untuk sepenuhnya meninggalkan modul CommonJS dan menggunakan modul ECMAScript secara eksklusif (selanjutnya disebut modul ES atau ESM).
Saya benar-benar ingin memiliki gaya kode yang konsisten di mana saja. Dalam proyek saya, seperti banyak proyek lainnya, kode sumbernya sendiri ditulis menggunakan modul ES, dan yang lainnya (pengujian, file konfigurasi, skrip tambahan untuk pembuatan) ditulis menggunakan modul CommonJS. Itu sangat mengganggu saya dan saya ingin semuanya dalam gaya yang sama - ESM.
Secara singkat tentang sistem modular di NodeJS
Sejak versi 13, NodeJS mendukung dua sistem modul:
CommonJS: fungsi digunakan untuk menghubungkan modul
require()
;
ECMAScript: kata kunci
import
atau fungsi digunakan untuk menghubungkan modulimport()
;
Penting untuk diketahui:
Anda tidak dapat menggunakan keduanya
require
dan dan dalam file yang samaimport
. Salah satunya.
Dalam modul ES, Anda dapat menghubungkan modul ES atau CommonJS lainnya.
Dalam modul CommonJS, Anda dapat menghubungkan modul CommonJS secara eksklusif .
Bagaimana NodeJS memilih sistem untuk file tertentu
Semuanya sederhana di sini. Ada dua ekstensi untuk file: .cjs
dan .mjs
yang menentukan bahwa ini adalah modul CommonJS atau ES.
, package.json
type
commonjs
module
- .js
.
Electron
Electron ? main.js
( background.js
) -- , , , , api . , :
const { app, BrowserWindow } = require('electron')
app.whenReady().then(() =>
new BrowserWindow().loadFile('index.html')
)
app.on('window-all-closed', () => app.quit())
: .
ESM, package.json
"type": "module"
main.js
:
- const { app, BrowserWindow } = require('electron')
+ import { app, BrowserWindow } from 'electron'
:
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module
. electron v12 NodeJS 14.15. ESM .
CommonJS
, electron, , JavaScript . -- require
:
electron /path/to/main.js
- , electron
require('/path/to/main.js')
electron CommonJS . main.js
-- ES . CommonJS ES . .
ESM-.
ES - Electron. , - .
, . , ESM CommonJS Electron. nodeJS .cjs
.
, .
JavaScript .js
. , .
tsc
esbuild
, , . .js
.
/ JavaScript .js
. .cjs
.
Vite, , [filename].[hash].cjs
. loader .cjs
. PR ( ) .cjs
JavaScript.
electron-builder
. ES , Vite CommonJS Electron.
, . electron-builder
. :
electron-builder
read-config-file
.
read-config-file
CommonJS ,require('/path/to/config.js')
.
CommonJS ES .
, electron-builder
ES .
electron-builder
CommonJS .cjs
. CommonJS .
, .
, read-config-file
.cjs
JavaScript:
if (config.endsWith('.js')) {
require(config)
} else {
// ... , JavaScript
}
PR , .
electron-builder
JavaScript package.json
"type": "module"
.
.js
.json
, .
, , ES .
-
-- -
require
.eslintrc.js
..eslintrc.cjs
CommonJS.
. IDE
.eslintrc.cjs
eslint.
--
dotenv
. ESM, .
Jest , ES .
- , . , , - . . . .