我有邮件模块在文件夹与以下结构:
- Mail - templates - <Handlebars files> - mail.module.ts
当我构建(编译)TypeScript项目时,我的template文件夹不包含在build文件夹中。如何在构建时将这些类型的文件移动到dist中?开发版本与生产版本是否不同?
template
build
dist
q5iwbnjs1#
您也可以通过在nest-cli中添加资产属性来完成此操作。json文件中提到的。对于您的情况,您可以尝试这样的操作:
"assets":["**/Mail/templates/*"]
或者如果你的模板都有一个特定的文件类型(我假设它被称为。模板),这也应该工作:
"assets":["**/*.template"]
第二个示例将复制类型的所有文件。模板从所有子目录到您的dist文件夹具有相同的文件夹结构时,你运行一个巢建设。同样,您可以使用此选项复制您选择的任何文件类型(。json、.proto等)。模板中的glob模式。
bqujaahr2#
TS编译器不处理TypeScript或JS以外的文件(例如。例如.ts、.js、.tsx等。).一种方法是,在编译NestJS之后,运行cp来复制这些文件。在您的package.json中替换行
.ts
.js
.tsx
cp
package.json
"build": "nest build",
与
"build": "nest build && cp ./Mail/templates ./build",
理想情况下,我会切换到Webpack(或类似的)来转译TypeScript并复制工件。NestJs有一个关于如何使用Webpack here构建的基本示例。要扩展到“复制”阶段,请安装copy-webpack-plugin npm包,并在webpack配置文件中添加这些内容:
copy-webpack-plugin
const copyFiles = require('copy-webpack-plugin'); // ... omitted for abbreviation module.exports = function(options) { return { // ... omitted for abbreviation , plugins: [ // ... omitted for abbreviation new copyFiles([ { from: 'Mail/templates', to: 'templates' } ]) ] }
jgovgodb3#
对于您的场景,一个快速解决方案是:
npm install --save-dev copyfiles
"postbundle": "copyfiles -u 1 src/**/*.template dist/"
"bundle": "tsc"
3hvapo4f4#
我也遇到了同样的问题,然后创建了typescript-cp。它根据项目的tsconfig检测源和输出目录。json(使用typescript自己的配置解析器,以尽可能顺利地工作),并将非TS文件复制到outDir。它有一个非常基本的CLI,参数与typescript的tsc相似,但它是tscp。它还支持包引用。
tscp
# Copy $ tscp # Copy for TS project references $ tscp -b # Watcher $ tscp -w # Watcher for TS project references $ tscp -b -w # Custom compiler settings $ tscp -p tsconfig.production.json # Help $ tscp -h
如果某些东西没有按预期工作,请随意打开一个问题。
c9x0cxw05#
我也有同样的问题。
src
注意事项:资源必须位于src文件夹中,否则将不会复制它们。
nest-cli.json
sourceRoot
entryFile
要查看您的配置文件应该是什么样子,您可以下载cli diagram here以下是我的项目存档:
这就是我的巢式。json文件看起来像
{ "$schema" : "https://json.schemastore.org/nest-cli", "collection": "@nestjs/schematics", "sourceRoot" : ".", "compilerOptions" : { "assets" : ["config.*.yaml", "assets/**"] }, "entryFile" : "src/main" }
ifmq2ha26#
如果你想要一个轻松的方式来做它,流行的ts-node包可以自动做到这一点!ts-node相当于运行node,但适用于TypeScript项目。如果你要使用ts-node,你不必编译TypeScript文件并运行js文件,ts-node在后台完成这一切。
ts-node
node
js
wgx48brx7#
在我的例子中,我添加了assets配置来复制html文件,它工作了。
{ "collection": "@nestjs/schematics", "sourceRoot": "src", "compilerOptions": { "assets": ["**/*.html"] } }
pnwntuvh8#
首先,将下面的代码添加到nest-cli中。json:
"compilerOptions": { "assets": ["*.proto"], "watchAssets": true }
然后最重要的是你必须把你的文件放在**/src**目录下,而不是项目根目录下。
8条答案
按热度按时间q5iwbnjs1#
您也可以通过在nest-cli中添加资产属性来完成此操作。json文件中提到的。
对于您的情况,您可以尝试这样的操作:
或者如果你的模板都有一个特定的文件类型(我假设它被称为。模板),这也应该工作:
第二个示例将复制类型的所有文件。模板从所有子目录到您的dist文件夹具有相同的文件夹结构时,你运行一个巢建设。同样,您可以使用此选项复制您选择的任何文件类型(。json、.proto等)。模板中的glob模式。
bqujaahr2#
TS编译器不处理TypeScript或JS以外的文件(例如。例如
.ts
、.js
、.tsx
等。).一种方法是,在编译NestJS之后,运行
cp
来复制这些文件。在您的package.json
中替换行与
理想情况下,我会切换到Webpack(或类似的)来转译TypeScript并复制工件。NestJs有一个关于如何使用Webpack here构建的基本示例。要扩展到“复制”阶段,请安装
copy-webpack-plugin
npm包,并在webpack配置文件中添加这些内容:jgovgodb3#
对于您的场景,一个快速解决方案是:
npm install --save-dev copyfiles
1.修改您的软件包。json,所以它包含了一个新的脚本:
"postbundle": "copyfiles -u 1 src/**/*.template dist/"
1.添加或更新您的捆绑包脚本,使其匹配:
"bundle": "tsc"
另一种更高级的方法是使用babel或webpack进行编译工作
3hvapo4f4#
我也遇到了同样的问题,然后创建了typescript-cp。
它根据项目的tsconfig检测源和输出目录。json(使用typescript自己的配置解析器,以尽可能顺利地工作),并将非TS文件复制到outDir。
它有一个非常基本的CLI,参数与typescript的tsc相似,但它是
tscp
。它还支持包引用。如果某些东西没有按预期工作,请随意打开一个问题。
c9x0cxw05#
我也有同样的问题。
src
文件夹下,正如Derryl Thomas在前面的答案中所说,你需要在nest-cli中指定你的资产的路径位置。json文件。注意事项:
资源必须位于src文件夹中,否则将不会复制它们。
src
文件夹处于同一级别,你还需要更新nest-cli.json
文件的sourceRoot
属性和entryFile
属性。要查看您的配置文件应该是什么样子,您可以下载cli diagram here
以下是我的项目存档:
这就是我的巢式。json文件看起来像
ifmq2ha26#
如果你想要一个轻松的方式来做它,流行的ts-node包可以自动做到这一点!
ts-node
相当于运行node
,但适用于TypeScript项目。如果你要使用ts-node
,你不必编译TypeScript文件并运行js
文件,ts-node
在后台完成这一切。wgx48brx7#
在我的例子中,我添加了assets配置来复制html文件,它工作了。
pnwntuvh8#
首先,将下面的代码添加到nest-cli中。json:
然后最重要的是你必须把你的文件放在**/src**目录下,而不是项目根目录下。