Node.js 如何使用适用于dev/prod环境的Webpack处理自签名SSL/TLS.pem文件的移动?
我花了将近两周的时间试图找到这个问题的答案,但都无济于事。我不再尝试使用Node.js 如何使用适用于dev/prod环境的Webpack处理自签名SSL/TLS.pem文件的移动?,node.js,express,ssl,webpack,pem,Node.js,Express,Ssl,Webpack,Pem,我花了将近两周的时间试图找到这个问题的答案,但都无济于事。我不再尝试使用webpack-dev-middleware来处理服务器刷新,所以我回到了使用nodemon来处理在开发阶段重新启动后端的问题 项目结构如下所示(主要是基本的,只是试图摆脱一般的障碍): / 开发/(输出) 产品/(产量) src/ 索引 tls/ 键。pem 证书 配置.ts configuration.ts import fs from "fs"; export const configuration
webpack-dev-middleware
来处理服务器刷新,所以我回到了使用nodemon
来处理在开发阶段重新启动后端的问题
项目结构如下所示(主要是基本的,只是试图摆脱一般的障碍):
- /
- 开发/(输出)
- 产品/(产量)
- src/
- 索引
- tls/
- 键。pem
- 证书
- 配置.ts
configuration.ts
import fs from "fs";
export const configuration = {
key: fs.readFileSync("./key.pem"),
cert: fs.readFileSync("./cert.pem"),
passphrase: "passphrase"
};
正如我在标题中提到的,我正在尝试使用webpack
将上述.pem
文件移动到我的开发和生产输出目录。我使用以下命令创建了这两个文件(使用一些密码短语):
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
这两个文件(密钥和证书)以及读取这些密钥和证书文件的TypeScript文件。由于这两个文件需要在服务器端使用HTTPS,我正在尝试将它们移动到dev/
和prod/
目录(当然,这取决于我在哪个环境中工作),并且我希望在启动服务器后在那里读取文件
没有webpack
,只要定期使用node index.server.js
并启动正在读取密钥和证书文件的服务器文件,这一切都是可以做到的,但当我试图强迫自己到处使用typescript
时,我还需要模块,这些模块反过来需要webpack
,这就造成了这个问题。我是后端新手,我正在尝试使用一些好的实践来处理登录,因此我正在尝试解决这个TLS/SSL问题,使cookie登录具有一些最佳实践标志
我在文件加载器
上尝试了几件事,但运气不好,而寻找这个问题的解决方案却几乎一无所获。如果你需要更多的信息,请告诉我,我会尽我所能回答,并提前感谢
编辑:在我尝试从SSL/TLS配置文件console.log
配置变量之后,这就是webpack
最后组装的内容:
var configuration = {
key: fs__WEBPACK_IMPORTED_MODULE_0___default.a.readFileSync("./key.pem"),
cert: fs__WEBPACK_IMPORTED_MODULE_0___default.a.readFileSync("./cert.pem"),
passphrase: "passphrase"
};
我的网页包配置-我有common
、dev
和prod
文件,以下是common
和dev
文件,例如:
webpack.common.js
const webpackNodeExternals = require("webpack-node-externals"),
configuration = {
target: "node",
entry: {
index: "./src/index.ts"
},
externals: [webpackNodeExternals()],
resolve: {
extensions: [".ts", ".js"]
},
module: {
rules: [
{
test: /\.ts$/,
include: /src/,
loader: "ts-loader"
}
]
}
};
module.exports = configuration;
const path = require("path"),
merge = require("webpack-merge"),
common = require("./webpack.common"),
webpackShellPlugin = require("webpack-shell-plugin"),
configuration = merge(common, {
mode: "development",
devtool: "source-map",
watch: true,
plugins: [
new webpackShellPlugin({
onBuildEnd: ["npm run dev:run"]
})
],
output: {
path: path.resolve(__dirname, "../dev"),
filename: "[name].server.js"
}
});
module.exports = configuration;
webpack.dev.js
const webpackNodeExternals = require("webpack-node-externals"),
configuration = {
target: "node",
entry: {
index: "./src/index.ts"
},
externals: [webpackNodeExternals()],
resolve: {
extensions: [".ts", ".js"]
},
module: {
rules: [
{
test: /\.ts$/,
include: /src/,
loader: "ts-loader"
}
]
}
};
module.exports = configuration;
const path = require("path"),
merge = require("webpack-merge"),
common = require("./webpack.common"),
webpackShellPlugin = require("webpack-shell-plugin"),
configuration = merge(common, {
mode: "development",
devtool: "source-map",
watch: true,
plugins: [
new webpackShellPlugin({
onBuildEnd: ["npm run dev:run"]
})
],
output: {
path: path.resolve(__dirname, "../dev"),
filename: "[name].server.js"
}
});
module.exports = configuration;
package.json
"dev:start": "webpack --config ./configurations/webpack.dev.js",
"dev:run": "nodemon -r dotenv/config ./dev/index.server.js",
"prod:start": "webpack --config ./configurations/webpack.prod.js"
}
我相信我的问题已经解决了。我使用了不同的方法来生成SSL/TLS密钥/证书,如下所示
在那之后,我设法发现我缺少了一些基本的网页包配置,因为这个过程认为\uu dirname
在某种程度上意味着root,所以我在配置中添加了以下内容:
node: {
__dirname: false,
__filename: false
}
该应用程序现已成功地服务于生产和开发环境