无法在打字稿构建中包含 .key 文件
Posted
技术标签:
【中文标题】无法在打字稿构建中包含 .key 文件【英文标题】:Unable to include .key file in typescript build 【发布时间】:2019-04-19 17:53:54 【问题描述】:我的文件夹结构中有一个public.key
和private.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
,但在这种情况下,文件应与import
或require
一起使用,而不是fs
。也没有必要将 Webpack 与 Node.js 应用程序一起使用,因为它们不会像客户端应用程序那样从中受益。
在这种情况下,keys
根本不应该是dist
的一部分,除非另有证明。它可以驻留在src
或dist
之外并处于同一嵌套级别:
dist
...
src
...
util
keys
由于src
和dist
中的相对路径预计相同,因此链接到util/keys
应该没有问题
【讨论】:
听起来不错,但是当我尝试在 heroku 上部署时出现问题,我需要运行git push to heroku
它将执行 npm install
l 然后运行 tsc
来转换文件到js
并运行服务器,现在为了让服务器生成令牌它需要密钥,我该如何在heroku上处理类似的事情?环境变量?
我不确定是什么问题。只需将关键文件提交到 repo。除了src
/dist
之外,您还有应用程序运行所需的其他文件,例如package.json
。关键文件在这些文件中。
是的,刚刚试过,效果很好,非常感谢。有没有更好的方法将私钥部署到heroku,即是否应该将它们转换为字符串并用作环境变量?
Giad 成功了。这取决于这些私钥的私密性。我自己不使用 Heroku,但是是的,环境变量是存储您不想提交的内容的好地方,尤其是当键是字符串时。在这种情况下,您可能需要先从process.env
读取密钥,然后再尝试fs.readFileSync
以上是关于无法在打字稿构建中包含 .key 文件的主要内容,如果未能解决你的问题,请参考以下文章