场景:比如需要部署在客户的服务器上,但不想让客户直接看到明文的代码,就需要打包。
(pkg官方已经不维护了,只需要记住pkg v5.8.1对应pkg-cache v3.4对应fetched-v18.5.0-linux-x64,就行了)
fetched-v18.5.0-linux-x64下载连接 下载后记得往下看
https://www.lanzouh.com/iQshu275iilc
密码:i51c
一、先全局安装pkg
npm i -g pkg
二、下载打包所需的 node-v16.16.0-linux-x64 和 node-v16.16.0-win-x64
三、放到pkg的缓存目录
windows:C:\Users\whh\.pkg-cache\v3.4,(把whh替换为你的电脑登录的用户名)
linux:cd $HOME/.pkg-cache/v3.4
有可能目录不存在,因为只有pkg下载过才会创建,但可以去pkg对应版本的源代码里面看,
链接
pkg/package.json at main · vercel/pkg · GitHub
pkg 5.8.1 pkg-cache 是3.5.2
然后再去 pkg-cache 源码
Release v3.5 · vercel/pkg-fetch · GitHub
下载对应的版本,(有个问题pkg源码说用的pkg-cache 3.5.2,但实际用的是3.4,因为自动创建的是v3.4,所以只支持到node18,而且它自动下载的是fetched-v18.5.0-linux-x64,我下载其他18版本好像不管用,最后还是用的vpn代理下载好了)
如果下载卡住了,那么清理一下pkg缓存
如果已经下载好了fetched还卡住,那么找一下项目里是不是有大文件或日志文件,也清理一下
rm -rf ~/.pkg-cache
如果你的没有fetched-v16.16.0-linux-x64,那么就把下载的node文件名前面的node改为fetched再放入
linux:可以先把下载的文件放在服务器的任意非隐藏目录
然后在复制到隐藏的目录里。
先进入到 cd $HOME/.pkg-cache/v3.4,然后再复制
linux的复制命令:cp /root/fetched-v16.16.0-linux-x64 ./
四、然后配置package.json文件
{
"name": "node",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "nodemon index.js",
"pkg": "pkg --target node16-linux-x64 -d . --output ./dist"
},
"author": "",
"license": "ISC",
"dependencies": {
"dayjs": "^1.11.3",
"express": "^4.18.1",
"moment": "^2.29.4",
"multiparty": "^4.2.3",
"mysql": "^2.18.1",
"nodemon": "^2.0.20",
"prettier": "^2.8.8",
"winston": "^2.4.6"
},
"bin": {
"credit-recognition-system": "index.js"//指定入口文件,就是那个启动服务器的js文件
},
"pkg": {
"scripts": [
"./utils/*.js",//因为pkg不会自动打包js文件,这里配置的是存放js的目录
"./origin/*.js",
"./apis/**/*.js"
],
"targets": [
"node16-linux-x64"//这里指定的是linux包
]
}
}
五、开始打包
npm run pkg
windows:完成图
linux:完成图
六、查看目录
七、运行文件
windows:直接双击.exe文件就可以
linux:给dist
目录添加执行权限 chmod +x dist 然后直接./dist或者sh ./dist
八、结束!
赏个赞呗!