Node
Voltaを使って Node.js をインストールする
作業するディレクトリに入って以下のコマンドを打つだけでOK
// LTS版をインストールする場合
$ volta install node
// 指定バージョンをインストールする場合
$ volta install node@18
node.jsで使ってるJSのモジュールシステム
モジュール | 概要 | 拡張子 | メモ |
---|---|---|---|
CommonJS | サーバーサイドで使用できる | .cjs | require / module.exports / exports CJSののモジュールはESMでも読み込める |
ESModules | ECMAScriptModules(エクマスクリプト)の略 サーバーサイドでもクライアントサイドでも使える |
.mjs | import / export 基本的にはESMを推奨 ESMのモジュールはCJSでは読み込めない |
CommonJS で使えるmodule
// コードを実行したファイルまでの絶対パス & コードを実行したディレクトリまでの絶対パス
console.log(__filename);
console.log(__dirname);
// ファイルの操作を行うためのメソッドが入ってる
const fs = require('fs')
fs.writeFileSync('./index.html', '<p>hello<p>')
// Promisesを使って処理の完了を待ってから次の処理を実行できる
const fs = require("fs").promises;
(async () => {
try {
await fs.writeFile("./index.html", "<h1>Hello World</h1>");
console.log("File created!!");
const data = await fs.readFile("./index.html", "utf-8");
console.log("File data!", data);
} catch (error) {
console.log("Error", error);
}
})();
参考記事
[Node.js]fs.promises APIの使い方
fs Promises API でawaitを使ってファイル読み書きする
// パスの操作を行うためのメソッドが入ってる
const path = require('path')
// path.resolve -> 第一引数にコードのディレクトリ、第二引数に現在のディレクトリから見た相対パス
const srcPath = path.resolve(__dirname, '../src/conponents')
// こちらも同じ意味となる
const srcPath = path.resolve(__dirname, '..', 'src', 'conponents')
CommonJS でのルール
// moduleを出力する時はmodule.exports
module.exports = hoge
// もしくは
module.exports = {
hoge
}
// requireするときは拡張子はいらない
const hoge = require('./hoge.js') <- 不要
const hoge = require('./hoge') <- OK
ESModules でのルール
そのままでは使えない。使えるようにする方法は2パターン
- package.jsonに
"type": "module",
記述する
もしくは - 拡張子を
.mjs
にする
// importするときは拡張子が必要
import lib from './lib' <- NG
import lib from './lib.mjs' <- OK
// importする時の書き方
import library from './lib.mjs'
library()
// 一括でimportする時の書き方
import * as library from './lib.mjs'
library.hoge()
library.fuga()
CJSのモジュール を ESMモジュール で呼び出す手順
- package.jsonに
"type": "module",
記述する - commonJSのファイルの拡張子を
.cjs
に変更する - ESMモジュールでは
import lib from './lib.cjs'
のようにimportする
ESMモジュール で __filename や __dirname を使いたい
import { fileURLToPath } from 'url'
import { dirname } from 'path'
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
console.log(__filename);
console.log(__dirname);
// もしくは↓
const __dirname = fileURLToPath(new URL('.', import.meta.url))
グローバルオブジェクトについて
- CommonJS(nodejs) :
global
で取得できる - ESModules(ブラウザ) :
window
で取得できる - 両方で動作する:
globalThis
で取得できる(ECMAScriptModulesで定められた)