webpack模块化打包css\less\图片

模块化打包css\less

1、安装css-loader,和style-loader(css-loader是将css文件打包。style-loader是将打包好的css文件渲染出来)

具体打包方法参照:webpack中文文档样式页面

安装:

 
npm install style-loader --save-dev
npm install --save-dev css-loader
//需要安装less插件,将less文件解析成css文件
npm install --save-dev less-loader less

2、在webpack.config.js中配置

module.exports= {
        //打包执行从main.js进入
    entry: "./src/main.js",
    //输出路径,当输出有链接时候,默认吧publicPath拼接到连接前
    output: {
            //根据动态路径
        path: path.resolve(__dirname, 'dist'),
        //输出的文件名
        filename: "bundle.js",
        publicPath: "dist/"
    },
    module: {
        rules: \[
                //配置css-loader
            {
                test: /\\.css$/,
                //此配置默认从右往左加载文件,即css-loader -->style-loader 顺序不能错
                use: \['style-loader', 'css-loader'\]
            },
             //配置less-loader
            {
                test: /\\.less$/,
                 //可以写成对象形式,此配置默认从右往左加载文件,
                 //即less-loader-->css-loader -->style-loader 顺序不能错
                 //less文件为css的升级版
                use: \[{
                    loader: "style-loader" // creates style nodes from JS strings
                }, {
                    loader: "css-loader" // translates CSS into CommonJS
                }, {
                    loader: "less-loader" // compiles Less to CSS
                }\]
            },
                   \]
    },
    plugins: \[new VueLoaderPlugin()\],
    resolve: {
        //导入的文件去掉后缀
        extensions:\['.css','.js','.vue'\],
        //项目导入vue的时候默认去找这个文件路径的vue
        alias: {
            'vue$': "vue/dist/vue.esm.js"
        }
    },
}

3、在main.js中加载css,否则在打包main.js的时候,没有css是不会打包的

require("./css/normal.css")
require("./css/special.less");

4、执行打包

打包图片

1、安装插件

//像css文件中有url() 连接使用url-loader
npm install --save-dev url-loader
//大文件可用file-loader

2、webpack.config.js配置

const path=require('path');
const VueLoaderPlugin = require('vue-loader/lib/plugin');
module.exports= {
    entry: "./src/main.js",
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: "bundle.js",
        publicPath: "dist/"
    },
    module: {
        rules: \[
            {
                test: /\\.css$/,
                use: \['style-loader', 'css-loader'\]
            },
            {
                test: /\\.less$/,
                use: \[{
                    loader: "style-loader" // creates style nodes from JS strings
                }, {
                    loader: "css-loader" // translates CSS into CommonJS
                }, {
                    loader: "less-loader" // compiles Less to CSS
                }\]
            },
            //这是配置图片的,
            {
                test: /\\.(png|jpg|gif|jpeg)$/,
                use: \[
                    {
                        loader: 'url-loader',
                        options: {
                            //限制图片的大小单位为字节,如果在限制以内,将图片转化成字符串输出
                            limit: 1400,
                            //超过设置的大小,可设置打包后的路径和名字img/图片名.自动生成的8位hash值.扩展名
                            name: 'img/\[name\].\[hash:8\].\[ext\]'
                        },
                    }
                \]
            },
            {
                test: /\\.js$/,
                exclude: /(node\_modules|bower\_components)/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: \['es2015'\]
                    }
                }
            },
            {
                test: /\\.vue$/,
                use: \['vue-loader'\]
            }
        \]
    },
    plugins: \[new VueLoaderPlugin()\],
    resolve: {
        //导入的文件去掉后缀
        extensions:\['.css','.js','.vue'\],
        //项目导入vue的时候默认去找这个文件路径的vue
        alias: {
            'vue$': "vue/dist/vue.esm.js"
        }
    },
}

3、main.js引入

require("./css/special.css");

4、执行打包 npm run build