主な更新箇所
下記6点(詳細はリンクを参照)
* Experimental Permission Model
* A synchronous import.meta.resolve
* Stable Test Runner
* V8 JavaScript engine updated to 11.3
* Single Executable Apps
* Ada to 2.0
あとはWindowsもARM版がリリースされてるとのこと
openjsf.org
nodejs.org
アンインストール
既存Versionをアンインストール
sudo apt remove nodejs apt
インストール
私の環境はUbuntuなのでaptで…と言いたいところだけどまだ公開されてないっぽいのでバイナリを取得
以下からダウンロード
Download | Node.js
$ VERSION=v20.0.0
$ DISTRO=linux-x64
$ wget https://nodejs.org/dist/$VERSION/node-$VERSION-$DISTRO.tar.xz -O /tmp/node-$VERSION-$DISTRO.tar.xz
$ sudo mkdir -p /usr/local/lib/nodejs
$ sudo tar -xJvf /tmp/node-$VERSION-$DISTRO.tar.xz -C /usr/local/lib/nodejs
$ sudo ln -s ./node-$VERSION-$DISTRO /usr/local/lib/nodejs/node
※wgetするURLはダウンロードページのバイナリを指定
.profileに下記追加
export PATH=/usr/local/lib/nodejs/node/bin:$PATH
Version確認
$ . .profile
$ node -v
v20.0.0
$ npm version
{
npm: '9.6.4',
node: '20.0.0',
acorn: '8.8.2',
ada: '2.0.0',
ares: '1.19.0',
brotli: '1.0.9',
cldr: '42.0',
icu: '72.1',
llhttp: '8.1.0',
modules: '115',
napi: '8',
nghttp2: '1.52.0',
nghttp3: '0.7.0',
ngtcp2: '0.8.1',
openssl: '3.0.8+quic',
simdutf: '3.2.7',
tz: '2023c',
undici: '5.21.0',
unicode: '15.0',
uv: '1.44.2',
uvwasi: '0.0.16',
v8: '11.3.244.4-node.3',
zlib: '1.2.13'
}
試してみる
パフォーマンス改善の[V8 JavaScript engine updated to 11.3]
使いやすくなった[Stable Test Runner]
モジュール開発に使用する[A synchronous import.meta.resolve]
権限管理が可能になる[Experimental Permission Model ]
[Ada to 2.0]は2.0に更新
上記はとりあえず追々やりたいと思う
個人的に気になったSingle Executable Appsを試したいので試す。
Single Executable Apps
直訳で単一実行可能アプリ。つまりNodejsで実行可能バイナリファイルが作成できるようになったという事。
まだ試験的な機能らしいが、もしこれが本実装された場合、今後Nodejsをインストールせずに作成したNodejsアプリが実行可能になるため、配布などがしやすくなる。とてもうれしい。
どうも機能が組み込まれたのはNode19.7からとのこと。Node18までしか触ってなかったのでもっとちゃんと追っていきたいなと思う。
APIドキュメントにサンプルがあるのでまずはそれを試す。
Single executable applications | Node.js v20.0.0 Documentation
見た感じ作成したスクリプトでBLOBを作成してインストールしているnodeコマンドに挿入して動かす仕組みっぽい。(すごいことしてない?)
とりあえずサンプルそのまま試す。
- サンプルスクリプト生成
$ echo 'console.log(`Hello, ${process.argv[2]}!`);' > hello.js
- 構成ファイルを作成
$ echo '{ "main": "hello.js", "output": "sea-prep.blob" }' > sea-config.json
- BLOBを生成
$ node --experimental-sea-config sea-config.json
Wrote single executable preparation blob to sea-prep.blob
- ベース実行可能ファイル作成
$ cp $(command -v node) hello
- バイナリの署名を削除
MacOSとWIndowsはここで署名削除をする。
6 生成したベース実行可能ファイルにBLOBを挿入
Linuxは下記コマンドで挿入可能。npxはnodejs v20に標準でインストール済み。postject も実行時にインストールしてくれるっぽい。
npx postject hello NODE_SEA_BLOB sea-prep.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
github.com
バイナリに電子署名
MacOSとWIndowsはここで署名をする。
実行してみる
$ ./hello 世界
Hello, 世界!
(node:4453) ExperimentalWarning: Single executable application is an experimental feature and might change at any time
(Use `hello --trace-warnings ...` to show where the warning was created)
試験的な機能である旨警告は出ますが実行はできました。
- 出力されたファイルを確認
$ ls -l hello
-rwxr-xr-x 1 nao nao 95685760 Apr 21 01:16 hello
Nodejsのバイナリにくっつけているため最小でも92MBになりますね…