简介
Node.js 从v18.16.0
,v19.7.0
版本开始原生支持了打包为可执行文件(Single executable applications), 常用的打包工具pkg也因此不在更新,下面介绍一下我在使用 NodeJsSingle executable applications
功能时的一些经验和问题。
使用
创建并打包你的项目文件
因为目前该功能只能将单个 js 文件封装为可执行文件,所以我们要借助打包工具(如webpack,rollup等)将 js 项目大包围一个 js 文件。由于 wenpack 的配置过于繁杂,这里介绍使用 rollup 工具进行打包。
安装 rollup:
npm install --global rollup
;在项目根目录新建
rollup.config.js
文件,内容如下(根据项目内容进行调整):const commonjs = require('@rollup/plugin-commonjs'); // commonjs支持,使用es模块可不使用此插件,安装:npm install @rollup/plugin-commonjs -D const { nodeResolve } = require('@rollup/plugin-node-resolve'); const json = require('@rollup/plugin-json'); // 将静态json文件作为模块导入,按需安装,安装:npm install @rollup/plugin-json -D const { string } = require('rollup-plugin-string'); // 将静态文件文本作为模块导入,按需安装,安装:npm install @rollup/plugin-json -D const terser = require('@rollup/plugin-terser');// 压缩打包后的文件大小,按需安装,安装:npm install @rollup/plugin-json -D module.exports = { input: 'dist/main.js', // 项目入口文件 output: { dir: 'output', // 输出文件目录 format: 'cjs' // 输出文件格式 }, plugins: [terser({ format: { comments: false } }), nodeResolve({ preferBuiltins: true, exportConditions: ['node'] }), commonjs(), json(), string({ include: ['**/*.html', '**/*.yml'] })] };
打包项目:
rollup -c
。
封装为可执行文件
在项目根目录新建
your-project-config.json
文件,内容如下(根据项目需求进行调整,官方说明):{ "main": "output/main.js", // 打包后的项目入口文件 "output": "your-project.blob", "disableExperimentalSEAWarning": true, "useCodeCache": true, "disableExperimentalSEAWarning": true, // 禁用Nodejs的试验性更能警告 "useSnapshot": false, // 使用快照 "useCodeCache": true // 使用代码缓存 }
封装文件:
- Windows:
node --experimental-sea-config your-project-config.json node -e "require('fs').copyFileSync(process.execPath, 'your-project.exe')" npx postject your-project.exe NODE_SEA_BLOB your-project.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
- Linux:
node --experimental-sea-config your-project-config.json cp $(command -v node) your-project npx postject your-project.exe NODE_SEA_BLOB your-project.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
等待封装完成。