在阅读了大量 SO 问题(以及在线研究)之后,我仍然无法使用 Webpack 2(v2.1.0-beta.27)、ExtractText 插件(v2.0.0-beta)生成 CSS 文件(其中包含 CSS) .4)、sass-loader (v3.2.0)、css-loader (v0.26.1) 和 style-loader (v0.13.1)。
目前,Webpack 2 成功完成并按预期生成了我的 JS 文件,但我的app.css
文件是空的(Chrome 会为该文件抛出 404)但根据我在 Chrome 中的 Sources 面板在正确的位置生成。这使我相信存在与css-loader
其他装载机有关的问题。
我当前的webpack.config.js
文件如下所示:
const webpack = require('webpack');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const autoprefixer = require('autoprefixer');
const path = require('path');
const resolve = path.resolve;
const rootDir = resolve(__dirname);
const dist = resolve(rootDir, 'coolAppName/secured_assets');
const assetIndex = resolve(rootDir, 'src/app');
const vendorIndex = resolve(rootDir, 'webpack.vendor.js');
const styleIndex = resolve(rootDir, 'webpack.style.js');
const fontPath = '../static/fonts/';
module.exports = {
watchOptions: {
poll: 3000,
aggregateTimeout: 1000,
},
devServer: {
port: 8080,
publicPath: 'http://localhost:8080/secured_assets/',
},
devtool: 'eval-source-map',
entry: {
app: assetIndex,
style: styleIndex,
vendor: vendorIndex,
},
output: {
path: dist,
filename: '[name].js',
publicPath: 'http://localhost:8080/secured_assets/'
},
module: {
loaders: [
// CSS files
{
test: /\.css$/,
loader: ExtractTextPlugin.extract({
fallbackLoader: 'style-loader',
loader: [
{
loader: 'css-loader',
}
]
}),
},
// SCSS files
{
test: /\.scss$/,
loader: ExtractTextPlugin.extract({
fallbackLoader: 'style-loader',
loader: [
{
loader: 'css-loader'
},
{
loader: 'sass-loader'
}
]
})
},
{
test: /\.(gif|png)$/,
loaders: [
{
loader: 'url-loader',
query: {
mimetype: 'image/png'
},
},
],
},
{
test: /\.js/,
loaders: 'babel-loader',
include: [
assetIndex,
],
exclude: /(node_modules|bower_components)/,
query: {
cacheDirectory: true,
},
},
{
test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
loaders: 'url-loader',
query: {
limit: 10000,
mimetype: 'application/font-woff',
name: `${fontPath}[name].[ext]`,
},
},
{
test: /\.(ttf|eot|svg|otf)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
loaders: 'file-loader',
query: {
name: `${fontPath}[name].[ext]`,
},
},
{
test: /\.json$/,
loaders: 'json-loader',
},
{
test: /\.html$/,
loaders: 'html-loader',
},
],
},
plugins: [
new ExtractTextPlugin({
filename: '/css/app.css',
allChunks: true,
})
],
};
我的webpack.style.js
文件如下所示:
// STYLE entrypoint
// vendor (CSS)
require('./coolAppName/static/fonts/custom-font-icons/styles.css');
require('font-awesome/css/font-awesome.css');
require('simple-line-icons/css/simple-line-icons.css');
require('lato-font');
require('./node_modules/bootswatch/yeti/bootstrap.min.css');
require('./node_modules/angularjs-toaster/toaster.css');
require('./node_modules/angular-busy2/dist/angular-busy.css');
require('./node_modules/perfect-scrollbar/dist/css/perfect-scrollbar.css');
require('./node_modules/angular-bootstrap-lightbox/dist/angular-bootstrap-lightbox.css');
require('./node_modules/angularjs-slider/dist/rzslider.min.css');
require('./node_modules/ui-select/dist/select.css');
require('./coolAppName/static/fonts/noto/noto.css');
// SCSS
require('./src/app/css/templates.scss');
我的文件结构看起来像这样(这是正确的):
在尝试迁移到 Webpack 2 之前,一切都按预期工作。唯一改变的是与 Webpack 2 升级有关,所有文件路径和我使用的加载器都是相同的(升级版本除外)。
这就是 Webpack 1 中重要部分的样子(我在上面的这个例子中去掉了 postcss-loader)
{
test: /\.css$/,
loader: ExtractTextPlugin.extract('style-loader', 'css-loader?sourceMap!postcss-loader'),
},
{
test: /\.scss$/,
loader: ExtractTextPlugin.extract('style-loader', 'css-loader?sourceMap!sass-loader?sourceMap!postcss-loader'),
},
最终我想在其中创建 1 个 CSS 文件/secured_assets/css/app.css
,其中包含我require
在webpack.style.js
. 此时,我没有收到任何错误,app.css
也没有内容,我在我的网络面板中看到 404(尽管它显示在 Chrome 的源中)。
更新
当我简单地运行它时,它会正确webpack --config ./webpack.dev.js
创建我的。app.css
当我运行webpack-dev-server --config ./webpack.dev.js
它没有。所以看起来是一个可能的 webpack-dev-server 问题......