在node中构建项目时如何将.env和其他文件放在dist文件夹中?

Pra*_*kar 3 build node.js typescript webpack package.json

我在我的节点项目中使用 Typescript,这是我的 tsconfig -

{
    "compilerOptions": {
        "module": "commonjs",
        "esModuleInterop": true,
        "target": "es6",
        "noImplicitAny": true,
        "moduleResolution": "node",
        "sourceMap": true,
        "outDir": "dist/application",
        "baseUrl": "./src",
        "paths": {
            "*": [
                "node_modules/*",
                "src/shared/types/*"
            ]
        }    
    },
    "include": [
        "src/**/*"
    ],
    "exclude": [
        "node_modules"
    ],
    "typedocOptions": {
        "mode": "modules",
        "out": "docs"
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的应用程序文件夹结构 -

.
??? dist
?   ??? application
?       ??? app.js
?       ??? app.js.map
?       ??? modules
?       ??? shared
??? environments
?   ??? .env.development
??? node_modules
??? nodemon.json
??? package-lock.json
??? package.json
??? security
?   ??? domain.crt
?   ??? domain.key
??? src
?   ??? app.ts
?   ??? modules
?   ?   ??? chat
?   ?   ??? main-controller.ts
?   ?   ??? sso
?   ??? shared
?       ??? constants
?       ??? models
?       ??? types
?       ??? utils
??? tsconfig.json
??? typedoc.json
Run Code Online (Sandbox Code Playgroud)

编译后,Typescript 编译器将所有内容放在 .dist/application 中。

在开发过程中,我的主文件 (app.ts) 在 ./src/app.ts 中。在这个 app.ts 文件中,我试图读取 ./src/app.ts 中的 .env.development 文件。这就是我在 app.ts 中读取此文件的方式 -

config({ path: resolve(Utils.getAppRoot(), "../environments/.env.development") });

但是在运行时系统无法解析 .env 文件的路径,因为 TS 编译器将 app.ts 代码放在 ./dist/application/app.js 中,并且 Node 无法找到 .env 文件的路径相对于当前的根路径。

要解决此问题,我需要在编译时将所有配置/静态文件(此处为 .env 文件)复制到 ./dist 文件夹中。

有人可以帮我设置 ts-config 以便在编译时将这些静态文件复制到 ./dist/folder 吗?

Beh*_*ooz 7

我不认为你可以使用 TypeScript 编译器来做到这一点。相反,我建议使用 NPM 脚本来执行此操作。您可以为每个目标环境定义单独的构建任务。例如,您可以定义build-dev任务来为开发环境构建项目,如下所示。

"build-dev": "cp .env.development ./dist/.env && tsc"
Run Code Online (Sandbox Code Playgroud)

您可以为每个环境创建一个脚本并将正确的.env文件复制到文件dist夹中。然后,您可以使用 NPM run 命令运行这些任务,例如:

npm run build-dev
Run Code Online (Sandbox Code Playgroud)