Bat*_*rka 20 build typescript nestjs
我在具有以下结构的文件夹中有邮件模块:
- Mail
- templates
- <Handlebars files>
- mail.module.ts
Run Code Online (Sandbox Code Playgroud)
当我构建(编译)TypeScript 项目时,我的template文件夹不包含在build文件夹中。dist构建时如何将这些文件移入?
开发和生产构建有什么不同吗?
Alb*_*rto 20
针对您的情况的快速解决方法是:
npm install --save-dev copyfiles
修改您的 package.json,使其包含一个新脚本:
"postbundle": "copyfiles -u 1 src/**/*.template dist/"
添加或更新您的捆绑脚本,使其匹配:
"bundle": "tsc"
另一种更高级的方法是使用 babel 或 webpack 进行编译工作
您也可以通过在文档中提到的 nest-cli.json 中添加资产属性来完成此操作。
对于你的情况,你可以尝试这样的事情:
"assets":["**/Mail/templates/*"]
Run Code Online (Sandbox Code Playgroud)
或者,如果您的模板都有特定的文件类型(我假设它称为 .template),这也应该有效:
"assets":["**/*.template"]
Run Code Online (Sandbox Code Playgroud)
当您运行嵌套构建时,第二个示例会将 .template 类型的所有文件从所有子目录复制到具有相同文件夹结构的 dist 文件夹。同样,您可以通过替换 glob 模式中的 .template 来使用它来复制您选择的任何文件类型(.json、.proto 等)。
TS编译器不处理比打字稿或JS(例如其他文件.ts,.js,.tsx等)。
一种方法是在cp编译 NestJS 后运行复制这些文件。在您的package.json替换行中
"build": "nest build",
Run Code Online (Sandbox Code Playgroud)
和
"build": "nest build && cp ./Mail/templates ./build",
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会切换到 Webpack(或类似的)来转译 TypeScript 和复制工件。NestJs有关于如何使用的WebPack建立一个基本的例子在这里。要将其扩展为“复制”阶段,请安装copy-webpack-pluginnpm 包并在 webpack 配置文件中添加这些内容:
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' }
])
]
}
Run Code Online (Sandbox Code Playgroud)
我正在努力解决同样的问题,然后创建了typescript-cp。
它根据项目的 tsconfig.json 检测源目录和输出目录(使用 typescript 自己的配置解析器,以尽可能顺利地工作)并将非 TS 文件复制到 outDir。
它有一个非常基本的 CLI,具有与 typescript 的 tsc 类似的参数,但这是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
Run Code Online (Sandbox Code Playgroud)
如果某些内容未按预期工作,请随时提出问题。
| 归档时间: |
|
| 查看次数: |
15786 次 |
| 最近记录: |