上传测试文件时如何修复 tsc-watch 重启?
How to fix tsc-watch restarts when test file uploading?
我想在我的 NestJS 项目中本地测试文件上传 API。我关注了this doc。但是,当我上传文件时 tsc-watch
重新启动,因为 upload
文件夹已更改。
这里我使用的是 NestJS
版本 6 以及从 nest-cli
安装的所有内容。我也在使用 Google Cloud Storage 来存储文件。我通过 运行 yarn start:dev
.
在本地测试项目
我尝试在 tsconfig.json
和 tsconfig.build.json
的 exclude
选项中添加 upload
文件夹,但它不起作用。
我也尝试过使用 nodemon
。不幸的是,当我更改代码时,nodemon
没有重新启动。
这里有一些代码 (repo here):
控制器
@Patch(':id/file')
@UseInterceptors(
FileInterceptor('file', { dest: join(__dirname, '../../upload') }),
)
async uploadProblem(
@UploadedFile() file: FileDto,
@Param('id') id: string,
) {
if (file) {
await this.service.uploadProblem(id, file);
} else {
throw new BadRequestException('No files uploaded');
}
}
服务
async uploadProblem(id: string, file: FileDto) {
const problem = await this.findById(id);
await this.fileService.uploadFile(`${problem.code}/problem`, file);
}
fileService
async uploadFile(name: string, file: FileDto) {
await this.bucket.upload(file.path, {
destination: name,
contentType: file.mimetype,
resumable: false,
});
removeSync(file.path);
}
package.json
{
...
"scripts": {
...
"start:dev": "tsc-watch -p tsconfig.build.json --onSuccess \"node dist/main.js\"",
...
},
"dependencies": {
"@google-cloud/storage": "^3.3.1",
"@nestjs/common": "^6.0.0",
"@nestjs/core": "^6.0.0",
"@nestjs/mongoose": "^6.1.2",
"@nestjs/platform-express": "^6.0.0",
"class-transformer": "^0.2.3",
"class-validator": "^0.10.1",
"fs-extra": "^8.1.0",
"mongoose": "^5.7.3",
"reflect-metadata": "^0.1.12",
"rimraf": "^2.6.2",
"rxjs": "^6.3.3"
},
"devDependencies": {
"@nestjs/testing": "^6.0.0",
"@types/express": "4.16.1",
"@types/fs-extra": "^8.0.0",
"@types/jest": "24.0.11",
"@types/mongoose": "^5.5.19",
"@types/node": "11.13.4",
"@types/supertest": "2.0.7",
"jest": "24.7.1",
"prettier": "1.17.0",
"supertest": "4.0.2",
"ts-jest": "24.0.2",
"ts-node": "8.1.0",
"tsc-watch": "2.2.1",
"tsconfig-paths": "3.8.0",
"tslint": "5.16.0",
"typescript": "3.4.3"
},
...
}
我希望文件能在之后被上传和删除,但是tsc-watch
一直在重新启动并且从未上传或删除文件。
当 upload
目录更改时,有没有办法阻止 tsc-watch
重新启动,或者我应该使用其他工具吗?
您可以在package.json
中设置忽略监视
"watch": {
"ignore": "upload"
}
第一个解决方案,使用 ts-lint
是将 upload
文件夹移动到 src
文件夹之外并忽略该文件夹。
另一种解决方案与您建议的相同,使用nodemon
和ts-node
,但nodemon
本身存在监视docker
内文件和更改启动命令的问题到以下。
"start": "nodemon -L --watch 'src/**/*.ts' --exec ts-node src/main.ts",
我想在我的 NestJS 项目中本地测试文件上传 API。我关注了this doc。但是,当我上传文件时 tsc-watch
重新启动,因为 upload
文件夹已更改。
这里我使用的是 NestJS
版本 6 以及从 nest-cli
安装的所有内容。我也在使用 Google Cloud Storage 来存储文件。我通过 运行 yarn start:dev
.
我尝试在 tsconfig.json
和 tsconfig.build.json
的 exclude
选项中添加 upload
文件夹,但它不起作用。
我也尝试过使用 nodemon
。不幸的是,当我更改代码时,nodemon
没有重新启动。
这里有一些代码 (repo here):
控制器
@Patch(':id/file')
@UseInterceptors(
FileInterceptor('file', { dest: join(__dirname, '../../upload') }),
)
async uploadProblem(
@UploadedFile() file: FileDto,
@Param('id') id: string,
) {
if (file) {
await this.service.uploadProblem(id, file);
} else {
throw new BadRequestException('No files uploaded');
}
}
服务
async uploadProblem(id: string, file: FileDto) {
const problem = await this.findById(id);
await this.fileService.uploadFile(`${problem.code}/problem`, file);
}
fileService
async uploadFile(name: string, file: FileDto) {
await this.bucket.upload(file.path, {
destination: name,
contentType: file.mimetype,
resumable: false,
});
removeSync(file.path);
}
package.json
{
...
"scripts": {
...
"start:dev": "tsc-watch -p tsconfig.build.json --onSuccess \"node dist/main.js\"",
...
},
"dependencies": {
"@google-cloud/storage": "^3.3.1",
"@nestjs/common": "^6.0.0",
"@nestjs/core": "^6.0.0",
"@nestjs/mongoose": "^6.1.2",
"@nestjs/platform-express": "^6.0.0",
"class-transformer": "^0.2.3",
"class-validator": "^0.10.1",
"fs-extra": "^8.1.0",
"mongoose": "^5.7.3",
"reflect-metadata": "^0.1.12",
"rimraf": "^2.6.2",
"rxjs": "^6.3.3"
},
"devDependencies": {
"@nestjs/testing": "^6.0.0",
"@types/express": "4.16.1",
"@types/fs-extra": "^8.0.0",
"@types/jest": "24.0.11",
"@types/mongoose": "^5.5.19",
"@types/node": "11.13.4",
"@types/supertest": "2.0.7",
"jest": "24.7.1",
"prettier": "1.17.0",
"supertest": "4.0.2",
"ts-jest": "24.0.2",
"ts-node": "8.1.0",
"tsc-watch": "2.2.1",
"tsconfig-paths": "3.8.0",
"tslint": "5.16.0",
"typescript": "3.4.3"
},
...
}
我希望文件能在之后被上传和删除,但是tsc-watch
一直在重新启动并且从未上传或删除文件。
当 upload
目录更改时,有没有办法阻止 tsc-watch
重新启动,或者我应该使用其他工具吗?
您可以在package.json
中设置忽略监视"watch": {
"ignore": "upload"
}
第一个解决方案,使用 ts-lint
是将 upload
文件夹移动到 src
文件夹之外并忽略该文件夹。
另一种解决方案与您建议的相同,使用nodemon
和ts-node
,但nodemon
本身存在监视docker
内文件和更改启动命令的问题到以下。
"start": "nodemon -L --watch 'src/**/*.ts' --exec ts-node src/main.ts",