【发布时间】:2017-03-14 08:47:07
【问题描述】:
我是 WebPack 的新手,我希望能够获取一个 CSS 文件目录 (.app/styles/[css files...]) 并将它们输出到一个 CSS 文件 (dist/styles.css )。
目前,所有的 JavaScript 文件都被编译成一个单独的“index_bundle.js”文件,这很完美,但我想为我的 CSS 文件实现同样的效果。
经过大量“谷歌搜索”后,我发现 WebPack 的 ExtractTextPlugin 应该能够帮助解决这个问题,但这仅适用于添加到“条目”属性的一个 CSS 文件(例如:条目:{style : "./app/styles/style.css"}) 然后将其作为链接标签添加到 html 的头部,这很好,但我希望我的所有 css 文件进入一个 styles.css 文件,然后使用它在 html 的头部作为链接。
我当前的 WebPack 配置如下所示:
var HtmlWebpackPlugin = require('html-webpack-plugin');
var HtmlWebpackPluginConfig = new HtmlWebpackPlugin({
template: __dirname + '/app/index.html',
filename: 'index.html',
inject: 'body'
});
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var ExtractTextPluginConfig = new ExtractTextPlugin(
"styles.css",
{
allChunks: false
}
);
module.exports = {
entry: {
index: "./app/index.js"//,
//styles: "./app/styles/style1.css" // I don't want one file, I want to use a directory eg: "./app/styles/"
},
output: {
path: __dirname + '/dist',
filename: 'index_bundle.js'
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader'
},
{
test: /\.css$/,
loader: ExtractTextPlugin.extract("style-loader", "css-loader")
}
]
},
plugins: [
HtmlWebpackPluginConfig,
ExtractTextPluginConfig
]
}
有人可以指出我正确的方向吗?即使它是另一个插件或不同的方法。任何帮助将不胜感激!
编辑: 我的新 WebPack 配置如下所示:
var HtmlWebpackPlugin = require('html-webpack-plugin');
var HtmlWebpackPluginConfig = new HtmlWebpackPlugin({
template: __dirname + '/app/index.html',
filename: 'index.html',
inject: 'body'
});
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var ExtractTextPluginConfig = new ExtractTextPlugin(
"index_bundle.css"
);
module.exports = {
entry: [
'./app/index.js',
'./app/index.css'
],
output: {
path: __dirname + '/dist',
filename: 'index_bundle.js'
},
module: {
preloaders: [
{
test: /\.css/,
exclude: /styles/,
loader: 'import-glob-loader'
}
],
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader'
},
{
test: /styles\.css$/,
loader: ExtractTextPlugin.extract("style-loader", "css-loader")
},
{
test: /\.json$/,
loader: 'json'
}
]
},
devServer: {
historyApiFallback: true
},
plugins: [
HtmlWebpackPluginConfig,
ExtractTextPluginConfig
]
}
【问题讨论】:
-
webpack 的工作方式是遍历主入口文件的依赖树(导入)。因此,通常,要将所有 css 捆绑在一个目录中,您需要为所有其他 css 文件创建索引
styles.css和@import(按照您希望它们出现在捆绑包中的顺序。 -
那么这是否意味着我每次添加新的 css 文件时都必须记住将所有 @imports 放入?
-
不,你需要一个全局导入:@import './mydir/**/*.css'
-
我正在使用“import-glob-loader”,但现在 WebPack 在运行 webpack 开发服务器时失败:“意外字符 '@'”。当我取出 css 条目时它可以工作,所以即使使用 glob 预加载器,它的语法似乎也会失败......
标签: javascript css webpack html-webpack-plugin