网络包版本
webpack: 5.65.0
webpack-cli: 4.9.1
webpack-dev-server 4.7.1
大家好,
我对编码和尝试使用前端的 React 和后端的 Hanami(一个 Ruby 框架)设置一个单体应用程序非常陌生。我想使用 Webpack 来处理我的 .js 和 .jsx 文件,因为我对 Ruby on Rails 很熟悉。
经过几个小时的配置,我设法让 Webpack 工作并成功编译了我的 javascript 文件。但是,我无法进行热重装工作。
我将 webpack devserver 与 Hanami WEBrick 服务器(在不同的端口上)一起运行,Webpack Devserver 成功编译了文件,并且一切都在我的 Hanami 服务器上正确提供。
控制台报告我已成功连接到 HMR 并已启用,如下所示:
但是,每当我对 Webpack 处理的任何 JS / JSX 文件进行更改时,它们都不会触发重新编译。我只有在关闭并重新启动服务器时才能看到更改。
我通过查看 Webpack Github 存储库以及文档尝试了不同的解决方案,但没有运气。任何想法为什么热重载不起作用?
链接到 Github 存储库
包.json
"name": "sakellion",
"version": "0.0.1",
"type": "module",
"private": true,
"devDependencies": {
"@babel/core": "^7.16.5",
"@babel/preset-env": "^7.16.5",
"@babel/preset-react": "^7.16.5",
"babel-loader": "^8.2.3",
"rails-erb-loader": "^5.5.2",
"stats-webpack-plugin": "*",
"webpack": "*",
"webpack-cli": "^4.9.1",
"webpack-dev-server": "*"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack"
},
"dependencies": {
"bootstrap": "^5.1.3",
"react": "^17.0.2",
"react-dom": "^17.0.2"
}
}
Webpack.config.cjs 文件:
StatsPlugin = require("stats-webpack-plugin");
var devServerPort = process.env.WEBPACK_DEV_SERVER_PORT,
devServerHost = process.env.WEBPACK_DEV_SERVER_HOST,
publicPath = process.env.WEBPACK_PUBLIC_PATH;
var config = {
target: "web",
entry: {
index: path.join(
__dirname,
"apps",
"web",
"assets",
"javascripts",
"packs",
"index.js"
),
demo: path.join(
__dirname,
"apps",
"web",
"assets",
"javascripts",
"packs",
"demo.js"
),
},
mode: "development",
output: {
path: path.join(__dirname, "public"),
filename: "[name]-[chunkhash].js",
publicPath: publicPath,
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env", "@babel/preset-react"],
},
},
},
{
test: /\.erb$/,
enforce: "pre",
loader: "rails-erb-loader",
},
],
},
plugins: [new StatsPlugin("webpack_manifest.json")],
};
if (process.env.INBUILT_WEBPACK_DEV_SERVER) {
config.devServer = {
static: { directory: path.join(__dirname, "public") },
client: {
progress: true,
},
hot: true,
watchFiles: ["./apps/web/assets/javascripts/**/*"],
port: devServerPort,
headers: { "Access-Control-Allow-Origin": "*" },
// proxy: {
// "/": {
// target: `http://localhost:2300`,
// secure: false,
// },
// },
};
config.output.publicPath = "//" + devServerHost + ":" + devServerPort + "/";
}
module.exports = config;
谢谢!