无法在打字稿构建中包含 .key 文件

Posted

技术标签:

【中文标题】无法在打字稿构建中包含 .key 文件【英文标题】:Unable to include .key file in typescript build 【发布时间】:2019-04-19 17:53:54 【问题描述】:

我的文件夹结构中有一个public.keyprivate.key 文件,它没有包含在构建中,即当我运行tsc 时。

我正在使用公钥/私钥对来生成 json Web 令牌。 这就是我导入工作正常并生成令牌的文件的方式。

private publicKey = fs.readFileSync(path.join(__dirname, "../../utils/keys/public.key"), "utf8");

相同的代码适用于 private.key 只是文件名更改。

这是我的tsconfig.json 文件


  "compilerOptions": 
    "module": "commonjs",
    "esModuleInterop": true,
    "target": "es6",
    "noImplicitAny": false,
    "moduleResolution": "node",
    "sourceMap": true,
    "outDir": "dist/",
    "pretty": true,
    "baseUrl": ".",
    "alwaysStrict": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "paths": 
      "*": ["node_modules/*", "src/*", "*"]
    
  ,
  "include": ["src/**/**/*.ts"],
  "exclude": ["node_modules"]

有没有办法让 typescript 包含 *.key 文件?

【问题讨论】:

问题缺少***.com/help/mcve。您如何使用该文件以及为什么要包含它? @estus 更新了问题以反映相同 这可能不是 ***.com/questions/36690779/typescript-copy-files 的副本,因为 XY 问题。 【参考方案1】:

TypeScript 转译 *.ts**.js* 文件。这不是 TypeScript 处理非脚本文件并将它们包含到构建中的任务。

Bundling 是 Webpack 的一项任务,可用于使用各自的加载器加载任意文件,例如file-loader,但在这种情况下,文件应与importrequire 一起使用,而不是fs。也没有必要将 Webpack 与 Node.js 应用程序一起使用,因为它们不会像客户端应用程序那样从中受益。

在这种情况下,keys 根本不应该是dist 的一部分,除非另有证明。它可以驻留在srcdist 之外并处于同一嵌套级别:

dist
  ...
src
  ...
util
  keys

由于srcdist 中的相对路径预计相同,因此链接到util/keys 应该没有问题

【讨论】:

听起来不错,但是当我尝试在 heroku 上部署时出现问题,我需要运行 git push to heroku 它将执行 npm installl 然后运行 ​​tsc 来转换文件到js 并运行服务器,现在为了让服务器生成令牌它需要密钥,我该如何在heroku上处理类似的事情?环境变量? 我不确定是什么问题。只需将关键文件提交到 repo。除了src/dist 之外,您还有应用程序运行所需的其他文件,例如package.json。关键文件在这些文件中。 是的,刚刚试过,效果很好,非常感谢。有没有更好的方法将私钥部署到heroku,即是否应该将它们转换为字符串并用作环境变量? Giad 成功了。这取决于这些私钥的私密性。我自己不使用 Heroku,但是是的,环境变量是存储您不想提交的内容的好地方,尤其是当键是字符串时。在这种情况下,您可能需要先从process.env 读取密钥,然后再尝试fs.readFileSync

以上是关于无法在打字稿构建中包含 .key 文件的主要内容,如果未能解决你的问题,请参考以下文章

ng构建无法从Git Bash中找到打字稿模块

迁移 gulp 进程以包含打字稿

无法重新声明块范围变量(打字稿)

打字稿构建从 node_modules 文件夹中获取错误

崇高文字3中的打字稿构建系统无法正常工作

从 5 到 6 的角度迁移后无法构建 - 找不到模块“打字稿”