我是Typescript和NPM的新手,我已经使用NestJS节点框架创建了一个API项目。我正在尝试通过捆绑应用程序来创建EXE文件。我已经尝试过Pkg exe创建者和fuse-box。我仍然找不到任何有效的解决方案。请有人帮我将我的应用程序捆绑到一个exe文件中。我已经在这个问题中附加了我的package.json。
`
{
"name": "health-first",
"version": "0.0.0",
"description": "Meal management system",
"author": "Dhayananth",
"license": "MIT",
"scripts": {
"build": "tsc -p tsconfig.build.json",
"format": "prettier --write \"src/**/*.ts\"",
"start": "ts-node -r tsconfig-paths/register src/main.ts",
"start:dev": "nodemon",
"start:debug": "nodemon --config nodemon-debug.json",
"prestart:prod": "rimraf dist && tsc",
"start:prod": "node dist/main.js",
"lint": "tslint -p tsconfig.json -c tslint.json",
"test": "jest",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest-e2e.json"
},
"dependencies": {
"@nestjs/common": "^5.4.0",
"@nestjs/core": "^5.4.0",
"@nestjs/typeorm": "^5.2.2",
"mysql": "^2.16.0",
"nestjs-flub": "^0.1.0",
"reflect-metadata": "^0.1.12",
"rimraf": "^2.6.2",
"rxjs": "^6.2.2",
"typeorm": "^0.2.11",
"typescript": "^3.0.1"
},
"devDependencies": {
"@nestjs/testing": "^5.1.0",
"@types/express": "^4.16.0",
"@types/jest": "^23.3.1",
"@types/node": "^10.7.1",
"@types/supertest": "^2.0.5",
"fuse-box": "^3.7.1",
"jest": "^23.5.0",
"nodemon": "^1.18.3",
"prettier": "^1.14.2",
"supertest": "^3.1.0",
"ts-jest": "^23.1.3",
"ts-loader": "^4.4.2",
"ts-node": "^7.0.1",
"tsconfig-paths": "^3.5.0",
"tslint": "5.11.0"
},
"jest": {
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"rootDir": "src",
"testRegex": ".spec.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"coverageDirectory": "../coverage",
"testEnvironment": "node"
}
}
`
答案 0 :(得分:0)
不太确定为什么要从应用程序创建exe文件?但是后来我不是Windows用户。以我的观点和经验,我使用Commander或vorpal使用嵌套容器创建执行命令。
这是我使用的脚本示例
import { NestFactory } from '@nestjs/core';
import { TaskConsumer, JobConsumer, ConsumerModule } from './consumers';
import * as commander from 'commander';
const pack = require('./../package.json');
import { AppModule } from 'app.module';
import { ConsumerInterface } from 'consumers/consumer.interface';
import { Logger } from '@nestjs/common';
async function bootstrap(requestedConsumer: 'task' | 'job') {
const app = await NestFactory.create(AppModule);
await app.init();
const consumer =
requestedConsumer === 'task'
? app.select(ConsumerModule).get<ConsumerInterface>(TaskConsumer)
: app.select(ConsumerModule).get<ConsumerInterface>(JobConsumer);
await consumer.listen(requestedConsumer);
}
commander
.version(pack.version)
.command('run <consumer>')
.action((requestedConsumer, cmd) => {
if (requestedConsumer !== 'task' && requestedConsumer !== 'job') {
Logger.warn(
`Consumer [${requestedConsumer}] is not a valid consumer. Please enter 'task' or 'job'`,
'Command',
);
process.exit();
}
bootstrap(requestedConsumer);
process.stdin.resume();
});
commander.parse(process.argv);
然后我像ts-node -r tsconfig-paths/register src/queue.ts run task
这样在dev中运行此脚本。然后输入node dist/queue.js run task
。我可以加上一个shebang,但是……我不知道为什么我不诚实!
不确定这是您的追求吗?但是,这就是我创建一个可以使用nestjs执行的命令的方式。