首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在我的webpack设置中使用‘提取-文本-插件’

如何在我的webpack设置中使用‘提取-文本-插件’
EN

Stack Overflow用户
提问于 2017-02-28 05:25:55
回答 1查看 411关注 0票数 1

我一直在尝试理解“webpack”中的“生产模式”。在我现在的“webpack 2”中,你可以运行webpack -p,但功能似乎不是很丰富。我从Webpack 1继承下来的设置是这样的:

代码语言:javascript
复制
var config = {
context: __dirname + '/app',
entry: './index.js',
output: {
    path: __dirname + '/app',
    filename: 'bundle.js'
},
plugins: [
    new CompressionPlugin({
        asset: "[path].gz[query]",
        algorithm: "gzip",
        test: /\.js$|\.html$/,
        threshold: 10240,
        minRatio: 0.8
    }),
    new webpack.ProvidePlugin({
        moment: "moment"
    }),
    new webpack.ProvidePlugin({
        $: "jquery",
        jQuery: "jquery"
    })
],
module: {
    loaders: [
        {
            test: /\.js$/,
            loader: 'babel-loader',
            exclude: /node_modules/
        },
        {
            test: /\.scss$/,
            loader: 'style-loader!css-loader!sass-loader',
            exclude: /node_modules/
        },
        {
            test: /\.html$/,
            loader: 'raw-loader',
            exclude: /node_modules/
        }
    ]
}
};

if (process.env.NODE_ENV === 'production') {
    config.output.path = __dirname + '/dist';
    config.plugins.push(new webpack.optimize.UglifyJsPlugin());
    config.plugins.push(new ExtractTextPlugin("styles.css"));
    config.module.loaders({
        test: /\.scss$/,
        use: ExtractTextPlugin.extract({
            fallback: "style-loader",
            use: "style-loader!css-loader!sass-loader"
        })
    })
}

module.exports = config;

我真正想要的是在生产模式下使用extract-text-plugin,我尝试了以下几种方法:

代码语言:javascript
复制
if (process.env.NODE_ENV === 'production') {
    config.output.path = __dirname + '/dist';
    config.plugins.push(new webpack.optimize.UglifyJsPlugin());
    config.plugins.push(new ExtractTextPlugin("styles.css"));
    config.module.loaders({
        test: /\.scss$/,
        use: ExtractTextPlugin.extract({
            fallback: "style-loader",
            use: "style-loader!css-loader!sass-loader"
        })
    })
}

我得到以下错误:

代码语言:javascript
复制
config.loaders({
           ^
TypeError: config.loaders is not a function
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-28 06:22:42

config.module.loaders是一个数组,因此您需要像处理插件一样进行推送。但是,你最终会得到两个.scss的加载器配置,这显然不是你想要的。相反,您可以定义一个变量,将其传递给config,如下所示:

代码语言:javascript
复制
// Default SCSS loader
var scssLoader = 'style-loader!css-loader!sass-loader';
if (process.env.NODE_ENV === 'production') {
  // Overwrite it with the extract-text loader
  scssLoader = ExtractTextPlugin.extract({
    fallback: "style-loader",
    use: "style-loader!css-loader!sass-loader"
  })
}

然后,配置中的.scss规则将变为:

代码语言:javascript
复制
{
  test: /\.scss$/,
  loader: scssLoader,
  exclude: /node_modules/
},
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42496059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档