webpack-dev-server 不重新编译(JS 文件和 SCSS 文件)
webpack-dev-server not recompiling (JS files AND SCSS files)
早上好,
升起来吧,太阳已经高高挂起,webpack 毁了我的一天!
我正在使用 webpack-dev-server(通过 packages.json 中的脚本):
"scripts": {
"dev-server": "webpack-dev-server",
}
那我运行用纱线运行dev-server
我想要的是每次保存文件时重新编译代码和刷新浏览器。我可以接受它不适用于 SCSS 文件的事实,但是在我的组件中的每个更改上重新编译 "manually" 只是身体上的痛苦。我尝试了很多网上找到的解决方案(non-exhaustive列表来了),然后问这里,但结果总是一样的:
ℹ「wdm」: 编译成功
当我修改文件(JS 或 SCSS)时没有任何反应。
这是一个简单的 React 应用程序,使用 SCSS 进行样式设置。
这是我的 webpack 配置:
const path = require('path');
const MiniCSSExtractPlugin = require('mini-css-extract-plugin');
const mode = process.env.NODE_ENV || 'development';
module.exports = env => {
return {
entry: ['babel-polyfill', './src/app.js'],
output: {
path: path.join(__dirname, 'public', 'dist'),
filename: 'bundle.js'
},
module: {
rules: [{
loader: 'babel-loader',
test: /\.js$/,
exclude: /node_modules/
}, {
test: /\.s?css$/,
loader: [
mode === 'development' ? 'style-loader' : MiniCSSExtractPlugin.loader,
{
loader: 'css-loader',
options: {
sourceMap: true
}
},
{
loader: 'sass-loader',
options: {
sourceMap: true
}
}
]
}
]
},
plugins: [
new MiniCSSExtractPlugin({ filename: 'styles.css' })
],
devtool: env === 'production' ? 'source-map' : 'cheap-module-eval-source-map',
devServer: {
contentBase: path.join(__dirname, 'public'),
publicPath: '/dist/'
}
};
};
这里是我尝试过的列表:
- 将
--output-public-path=/dist/
添加到脚本
- 在webpack.config.js中的devServer配置中使用以下内容:
host: '0.0.0.0',
contentBase: path.join(__dirname, 'public'),
publicPath: '/dist/',
historyApiFallback: true,
compress: true,
port: 8080,
watchContentBase: true,
inline: true,
hot: true
- 使用具有以下配置的 HtmlWebpackConfig:
new HtmlWebpackPlugin({
title: 'Prognostic',
filename: './public/dist/index.html',
template: './public/index.html'
})
- 删除/添加 webpack 和 webpack-dev-server
- 使用全局 webpack-dev-server 而不是项目一 (npm i -g webpack-dev-server)
- 当然还有更多,但我不记得了...糟糕
有关信息,这是我使用的版本:
- Babel-loader@7
- 反应@^16.8.6,
- webpack-dev-server@^3.9.0
- webpack@^4.41.2
所以,我希望发生两件事:
- JS文件改变时自动重新编译
- SCSS 文件更改时自动重新编译(如果可能)
如果你能帮我做到这一点,我会提名你为我的年度圣诞老人开发者(是的,你可以将其添加到你的简历中)
谢谢!
PS:当 Grammarly 告诉我我的文字听起来像 "friendly"
时大笑
我不认为你可以通过 webpack 做到这一点你需要使用像 react-hot-loader
这样的库
Webpack 开发服务器在您的文件上添加一个观察程序,以在文件被修改时触发编译。
但有时,根据您使用的文本编辑器,这根本不会触发。
我有同样的问题,使用 sublimetext:当我保存我的代码时,webpack 开发服务器不会重建。
所以我没有使用默认的触发机制,而是使用了 webpack 的另一种选择:
devServer: {
hot: true,
watchOptions: {
aggregateTimeout: 300,
poll: true
},
}
服务器将每隔 300 毫秒检查文件是否已更改,如果已更改,则重建。
我希望我是你的年度圣诞老人开发者:]
早上好,
升起来吧,太阳已经高高挂起,webpack 毁了我的一天!
我正在使用 webpack-dev-server(通过 packages.json 中的脚本):
"scripts": {
"dev-server": "webpack-dev-server",
}
那我运行用纱线运行dev-server
我想要的是每次保存文件时重新编译代码和刷新浏览器。我可以接受它不适用于 SCSS 文件的事实,但是在我的组件中的每个更改上重新编译 "manually" 只是身体上的痛苦。我尝试了很多网上找到的解决方案(non-exhaustive列表来了),然后问这里,但结果总是一样的:
ℹ「wdm」: 编译成功
当我修改文件(JS 或 SCSS)时没有任何反应。
这是一个简单的 React 应用程序,使用 SCSS 进行样式设置。
这是我的 webpack 配置:
const path = require('path');
const MiniCSSExtractPlugin = require('mini-css-extract-plugin');
const mode = process.env.NODE_ENV || 'development';
module.exports = env => {
return {
entry: ['babel-polyfill', './src/app.js'],
output: {
path: path.join(__dirname, 'public', 'dist'),
filename: 'bundle.js'
},
module: {
rules: [{
loader: 'babel-loader',
test: /\.js$/,
exclude: /node_modules/
}, {
test: /\.s?css$/,
loader: [
mode === 'development' ? 'style-loader' : MiniCSSExtractPlugin.loader,
{
loader: 'css-loader',
options: {
sourceMap: true
}
},
{
loader: 'sass-loader',
options: {
sourceMap: true
}
}
]
}
]
},
plugins: [
new MiniCSSExtractPlugin({ filename: 'styles.css' })
],
devtool: env === 'production' ? 'source-map' : 'cheap-module-eval-source-map',
devServer: {
contentBase: path.join(__dirname, 'public'),
publicPath: '/dist/'
}
};
};
这里是我尝试过的列表:
- 将
--output-public-path=/dist/
添加到脚本 - 在webpack.config.js中的devServer配置中使用以下内容:
host: '0.0.0.0',
contentBase: path.join(__dirname, 'public'),
publicPath: '/dist/',
historyApiFallback: true,
compress: true,
port: 8080,
watchContentBase: true,
inline: true,
hot: true
- 使用具有以下配置的 HtmlWebpackConfig:
new HtmlWebpackPlugin({
title: 'Prognostic',
filename: './public/dist/index.html',
template: './public/index.html'
})
- 删除/添加 webpack 和 webpack-dev-server
- 使用全局 webpack-dev-server 而不是项目一 (npm i -g webpack-dev-server)
- 当然还有更多,但我不记得了...糟糕
有关信息,这是我使用的版本:
- Babel-loader@7
- 反应@^16.8.6,
- webpack-dev-server@^3.9.0
- webpack@^4.41.2
所以,我希望发生两件事:
- JS文件改变时自动重新编译
- SCSS 文件更改时自动重新编译(如果可能)
如果你能帮我做到这一点,我会提名你为我的年度圣诞老人开发者(是的,你可以将其添加到你的简历中)
谢谢!
PS:当 Grammarly 告诉我我的文字听起来像 "friendly"
时大笑我不认为你可以通过 webpack 做到这一点你需要使用像 react-hot-loader
这样的库Webpack 开发服务器在您的文件上添加一个观察程序,以在文件被修改时触发编译。 但有时,根据您使用的文本编辑器,这根本不会触发。
我有同样的问题,使用 sublimetext:当我保存我的代码时,webpack 开发服务器不会重建。
所以我没有使用默认的触发机制,而是使用了 webpack 的另一种选择:
devServer: {
hot: true,
watchOptions: {
aggregateTimeout: 300,
poll: true
},
}
服务器将每隔 300 毫秒检查文件是否已更改,如果已更改,则重建。
我希望我是你的年度圣诞老人开发者:]