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

发布于 2022-09-07 20:19:47 字数 2963 浏览 15 评论 0

问题描述

这是我的目录结构,我想把css2文件夹下的所有scss文件合并成一个css文件打包到build目录下
clipboard.png

问题出现的环境背景及自己尝试过哪些方法

extractTextPlugin插件我知道是用来分离scss文件的
问题出在合并scss文件的过程,我想把所有scss文件合并,只能在js入口文件里import么?
我如果想合并100个scss或者不定个数个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, //为静态资源生成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);    //将多个参数组合成一个 path
        pathname = pathDir ? pathname.replace(new RegExp('^' + pathDir), '') : pathname;
        entries[pathname] =  basename;
    }
    return entries;
}

我想知道怎么把不定个数个scss文件打包到build目录下

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

怪我鬧 2022-09-14 20:19:47

你不会在scss中import 吗?

眼眸印温柔 2022-09-14 20:19:47

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';

我为君王 2022-09-14 20:19:47

问题出在合并scss文件的过程,我想把所有scss文件合并,只能在js入口文件里import么?
不是只能在入口文件import,可以在所有会打包进去的文件中进行import,scss文件中也可以import
只要保证scss文件有使用到,一条链下来都会打包进去的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文