Windows pm2 执行 npm 脚本或执行 yarn 脚本时出现的问题和解决方案
最编程
2024-03-09 17:56:24
...
环境: 在windows上启动终端来运行一个项目;通过指令npm run start来启动,但是将终端一关,就无法访问了,所以想到用pm2来管理
1. 全局安装pm2
npm i pm2 -g
2. 在项目根目录执行指令(大部分兄弟的错误使用方法)
pm2 start "npm run start"
// 或
pm2 start "npm" -- start
在windows上很遗憾都不行,下面直接上正确代码,有两种方法实现
第一种简单,但是并不是所有pm2版本都支持,且会有一闪而过的cmd框(我下载的5.31版本支持)
推荐第二种
第一种方法:
1)在项目根目录新建pm2.js;并且在其中写入
const exec = require("child_process").exec;
exec("npm run dev", { windowsHide: true });
2)在项目根目录执行
pm2 start pm2.js --name projectName // projectName 替换为你的项目名称,最好不为中文,中文有显示错乱问题
第二种方法:
1)在项目根目录新建ecosystem.config.js ;并且在其中写入
module.exports = {
apps: [
{
name: "demo", // 项目名称
cwd: "./",
script:
"C:\\Users\\zhangsan\\AppData\\Roaming\\nvm\\v16.16.0\\node_modules\\npm\\bin\\npm-cli.js", // npm-cli.js路径,下面会说如何找
args: "run dev",
},
],
};
2) 如何找到自己的npm-cli.js路径
。
- 打开任意终端执行
npm config get prefix
-
将其输出复制到文件夹并打开
-
在打开的文件夹依次点击node_modules —>npm —> bin ,即可看到npm-cli.js
- .最简单得到
npm-cli.js路径
的方法
npm config get prefix
// 拼接上
\\node_modules\\npm\\bin\\npm-cli.js
// npm config get prefix 打印出的路径也需要对应\\
4) 在项目根目录执行
pm2 start
第三种(第一种结合第二种的改版)
1)在项目根目录新建pm2.js;并且在其中写入
const exec = require("child_process").exec;
exec("npm run dev", { windowsHide: true });
2)在项目根目录新建ecosystem.config.js ;并且在其中写入
module.exports = {
apps: [
{
name: "demo", // 项目名称
cwd: "./",
script:
"./pm2.js",
},
],
};
3)在项目根目录执行
pm2 start // 这样每次执行时更简便
推荐阅读
-
Windows pm2 执行 npm 脚本或执行 yarn 脚本时出现的问题和解决方案
-
前端搭建指南:调试本地开发环境的实用技巧 - 在CLI脚手架项目里,别忘了添加库文件及其版本依赖 1. 实时联动与修改: a) 首先确保在当前CLI脚手架项目的`package.json`依赖中加入所用库文件及其正确版本。 b) 通过npm link在本地创建硬连接,使得库与项目能实时修改、同步。运行如下命令: ``` $ cd your-lib-dir $ npm link $ cd your-cli-dir $ npm link your-lib ``` 2. 模拟部署环境: 当需测试线上环境时,解除本地软链接。回到库文件目录并执行: ``` $ cd your-lib-dir $ npm unlink ``` 同样,在CLI项目目录执行: ``` $ cd your-cli-dir $ npm uninstall your-lib --save ``` 注意此时可能会出现因缺少库文件依赖导致的错误,但可暂且忽略,这样能避免将来遗漏或重复安装的问题。 3. 发布后的操作: 如果库已上线,可先清空CLI项目的`node_modules`目录(`rm -rf node_modules`),然后重新安装所有依赖: ``` $ npm install ``` 通过以上步骤,您就能顺畅地调试和部署您的脚手架项目了。 总结 `link` & `unlink` 命令的运用: 1. `npm link`:在本地创建硬连接,便于实时协作与同步。 2. `npm unlink`:模拟线上环境并解除软链接,为正式部署做准备。