0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Node.JSのメモ

Last updated at Posted at 2023-10-30

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で定められた)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?