鍍金池/ 問答/HTML/ webpack3怎么把多個scss文件合并打包成一個css文件?

webpack3怎么把多個scss文件合并打包成一個css文件?

問題描述

這是我的目錄結(jié)構(gòu),我想把css2文件夾下的所有scss文件合并成一個css文件打包到build目錄下
clipboard.png

問題出現(xiàn)的環(huán)境背景及自己嘗試過哪些方法

extractTextPlugin插件我知道是用來分離scss文件的
問題出在合并scss文件的過程,我想把所有scss文件合并,只能在js入口文件里import么?
我如果想合并100個scss或者不定個數(shù)個scss文件怎么辦
clipboard.png

配置文件

const path = require('path');
const glob = require('glob');
const htmlPlugin = require('html-webpack-plugin');
const extractTextPlugin = require("extract-text-webpack-plugin");
const webpack = require("webpack");


var imJsFile = glob.sync('./im/js/core2/**/*.js');


var config = {
    entry:{
        entry:imJsFile
    },
    output:{
        path:path.resolve(__dirname,'build/im'),
        filename:'./js/sp.im.min.js'
    },
    devServer:{
        contentBase:path.resolve(__dirname,'build'),
        host:'localhost',
        compress:true,
        port:1717
    },
    module:{
        rules:[
            
            {
                test: /\.scss$/,
                use: extractTextPlugin.extract({
                    use: [{
                        loader: "css-loader"
                    }, {
                        loader: "sass-loader"
                    }],
                    fallback: "style-loader"
                })
             }
        ]
    },
    plugins:[
        new webpack.ProvidePlugin({
            jQuery:"jquery"
        }),
        new extractTextPlugin("/css/[name].css")
    ]
};

var viesObj = getView('im/view/onlineservice/chat2/*.html');
var pages = Object.keys(viesObj);
pages.forEach(function(pathname) {
    var htmlName = viesObj[pathname]
    var conf = {
        filename: './view/' + htmlName + '.html', //生成的html存放路徑,相對于path
        template: './im/view/onlineservice/chat2/' + htmlName + '.html', //html模板路徑
        hash: true, //為靜態(tài)資源生成hash值
        //chunks: ['common',htmlName],//需要引入的chunk,不配置就會引入所有頁面的資源
        minify: { //壓縮HTML文件    
            removeAttributeQuotes:true, //刪除雙引號
            removeComments: true, //移除HTML中的注釋
            collapseWhitespace: false //刪除空白符與換行符
        }
    };
    config.plugins.push(new htmlPlugin(conf));
});


module.exports = config;

function getView(globPath, pathDir) {
    var files = glob.sync(globPath);
    var entries = {},
        entry, dirname, basename, pathname, extname;

    for (var i = 0; i < files.length; i++) {
        entry = files[i];
        dirname = path.dirname(entry);  //返回文件路徑  
        extname = path.extname(entry);  //返回文件擴展名
        basename = path.basename(entry, extname);  //提取出用 ‘/' 隔開的path的最后一部分,過濾entry中的extname字符 
        pathname = path.join(dirname, basename);    //將多個參數(shù)組合成一個 path
        pathname = pathDir ? pathname.replace(new RegExp('^' + pathDir), '') : pathname;
        entries[pathname] =  basename;
    }
    return entries;
}

我想知道怎么把不定個數(shù)個scss文件打包到build目錄下

回答
編輯回答
尋仙

問題出在合并scss文件的過程,我想把所有scss文件合并,只能在js入口文件里import么?
不是只能在入口文件import,可以在所有會打包進(jìn)去的文件中進(jìn)行import,scss文件中也可以import
只要保證scss文件有使用到,一條鏈下來都會打包進(jìn)去的

2017年4月19日 16:30
編輯回答
糖果果

webpack.config.js配置如下
var ExtractTextPlugin = require("extract-text-webpack-plugin");//extract-text-webpack-plugin安裝此插件
module:{
loaders:[
{test: /.css$/, loader: ExtractTextPlugin.extract("style-loader", "css-loader")}
]
},
plugins:[
new ExtractTextPlugin("css/[name].css")//則會生成一個css文件
]
比如你的js文件中這樣引入即可:
import './css/lib/bootstrap.min.css'
import './css/test.css';

2018年5月22日 19:46
編輯回答
別硬撐

你不會在scss中import 嗎?

2017年5月12日 19:30