我正在使用带有 docker 的 Webpack 配置。
开发步骤一切顺利。然而,这不适用于我的预生产和生产步骤。这些步骤之间的区别在于,当它是开发步骤时,我复制整个存储库,而当它是预生产/生产步骤时,我仅复制构建文件。
为什么?因为我想优化我的服务器空间。
这是我的docker文件配置:
FROM node:alpine AS base
USER root
WORKDIR /app
COPY frontend/package*.json /app/
RUN npm install
RUN npm install -g serve
FROM base AS development
COPY frontend /app/
RUN npm run build:development
FROM base AS preproduction
COPY frontend/build /app/build
COPY frontend/public /app/public
COPY frontend/webpack.config.js /app/
COPY frontend/env /app/env
FROM base AS production
COPY frontend/build /app/build
COPY frontend/public /app/public
COPY frontend/webpack.config.js /app/
COPY frontend/env /app/env
如上所示,只有构建文件被粘贴到容器中,以便在应用程序存储库“app”中进行预生产和生产(构建是在运行 dockerfile 之前在 jenkins 管道中完成的)。
这是我的 webpack 配置:
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const Dotenv = require("dotenv-webpack");
module.exports = () => {
console.info("Environment: ", process.env.NODE_ENV);
return {
entry: path.resolve(__dirname, "src", "index.tsx"),
output: {
path: path.resolve(__dirname, "build"),
filename: "bundle.js",
assetModuleFilename: "assets/[name][ext]",
},
devServer: {
compress: true,
port: 3000,
static: __dirname,
historyApiFallback: true,
},
plugins: [
new Dotenv({
path: path.resolve(__dirname, `./env/.env.${process.env.NODE_ENV}`),
systemvars: true,
}),
new HtmlWebpackPlugin({
template: path.resolve(__dirname, "build", "index.html"),
filename: "index.html",
favicon: "./public/favicon.ico",
manifest: "./public/manifest.json",
inject: "body",
}),
],
...
}
这是我的 package.json 脚本命令,我正在运行:
"cleanBuild": "rm -rf build/* && cp public/index.html build/index.html",
"build:preproduction": "npm run cleanBuild && NODE_ENV=preproduction webpack --mode production",
"start:preproduction": "NODE_ENV=preproduction webpack serve --mode production --port 3000 --allowed-hosts all",
那么,有谁知道是否必须将 src 文件存在于应用程序文件夹中才能让 webpack 工作?
如果没有,我该如何管理或解决我的问题?
为了解决这个问题,我复制粘贴了SRC文件,这是为了让webpack正常运行所必需的。