将NestJS项目作为Windows服务启动的相关技术问题咨询
问题1解答:可以使用node-windows部署NestJS项目
你当前服务能安装但无法访问,是配置错误导致,核心问题如下:
- 你的配置代码存在语法错误:
scriptOptions数组后多了一个多余的闭合方括号,会导致参数解析异常 - 没有配置
cwd参数指定项目根目录,nest cli执行时的默认工作目录不是你的项目目录,所有相对路径都会失效 scriptOptions不能将多个参数合并为一个字符串,需要拆分为单独的数组元素- 部署场景不要加
--watch参数,该参数是开发时监听代码变更用的,会额外占用资源也可能引发异常
更稳妥的部署方式建议先将NestJS项目编译为生产包:执行nest build生成dist目录,直接启动编译后的入口文件,不需要调用nest cli,稳定性更高,参考配置如下:
const svc = new Service({ name: 'TestNestService', description: 'NestJS backend service', script: 'PATH_TO_PROJECT\\dist\\main.js', // 直接指向编译后的入口文件 cwd: 'PATH_TO_PROJECT', // 必须指定项目根目录作为工作目录 execPath: 'C:\\Program Files\\nodejs\\node.exe', }); svc.on('install', function () { console.log('installed'); svc.start(); }); svc.install();
如果一定要用nest cli启动,修正后的配置如下:
const svc = new Service({ name: 'Test', description: 'Test', script: 'PATH_TO_PROJECT\\node_modules\\@nestjs\\cli\\bin\\nest.js', scriptOptions: [ 'start', '--config', 'PATH_TO_PROJECT\\tsconfig.build.json' ], // 拆分参数为独立元素,删掉多余的闭合方括号 cwd: 'PATH_TO_PROJECT', // 新增工作目录配置 execPath: 'C:\\Program Files\\nodejs\\node.exe', });
问题2解答:nest cli的start命令完全支持传入绝对路径
--config参数同时支持绝对路径和相对路径,相对路径的解析基准是执行命令时的工作目录,你之前没配置cwd时工作目录不是项目根目录,即使传绝对路径也可能因为其他依赖路径异常导致服务启动失败,配置cwd后相对路径、绝对路径都可以正常使用。
问题3解答:Angular项目启动分两种场景处理
场景1:托管开发环境ng serve服务
和NestJS的配置逻辑一致,调用@angular/cli的执行文件即可,参考配置:
const svc = new Service({ name: 'TestNgService', description: 'Angular dev server', script: 'PATH_TO_ANGULAR_PROJECT\\node_modules\\@angular\\cli\\bin\\ng.js', scriptOptions: [ 'serve', '--host', '0.0.0.0', // 需要外部访问必须加该参数,默认只监听localhost '--port', '4200' ], cwd: 'PATH_TO_ANGULAR_PROJECT', execPath: 'C:\\Program Files\\nodejs\\node.exe', });
注意:该方式仅适合开发调试用,不适合生产环境,ng serve内置的开发服务器性能和稳定性都不足以支撑生产访问。
场景2:生产环境部署
建议先执行ng build编译出dist目录的静态资源,直接用IIS、Nginx等Web服务器托管静态文件,将Web服务设置为开机自启即可,性能、稳定性都远高于用node-windows托管ng serve。
内容的提问来源于stack exchange,提问作者nkoniishvt
相关产品推荐
相关产品推荐

