Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用适用于dev/prod环境的Webpack处理自签名SSL/TLS.pem文件的移动?_Node.js_Express_Ssl_Webpack_Pem - Fatal编程技术网

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
}
该应用程序现已成功地服务于生产和开发环境