2. webpack,附:开发模式---最终版

开发环境:

  mode:development

  安装包的时候使用npm i xx -D

  安装完成之后会在package.json中的devDependencies

  使用的一些构建工具比如glup、webpack这些只是在开发中使用的包,

  上线以后就和他们没关系了,所以将它写入devDependencies

生产环境:

  mode:production

  安装包的时候使用npm i xx -S

  安装完成之后会在package.json中的dependencies

  比如我们写一个项目要依赖于jQuery,没有这个包的依赖运行就会报错,

  这时候就把这个依赖写入dependencies

卸载:

  npm uninstall xxx

只要是在开发中,都要使用devserver

  1.安装webpack-dev-server

  2.配置devserver

通过使用不同的Loader,Webpack可以要把不同的文件都转成JS文件,

比如CSS、ES6/7、JSX等。

test:匹配处理文件的扩展名的正则表达式 /\.css$/ /\.js$/ /\.less$/...

use:loader名称,就是你要使用模块的名称

include/exclude:手动指定必须处理的文件夹或屏蔽不需要处理的文件夹

query:为loaders提供额外的设置选项

热更新:

  1.devServer下设置hot为true

  2.引入webpack

  3.到plugins下 new webpack.HotModuleReplacementPlugin()

  4.在入口文件中写

    if(module.hot){

      module.hot.accept()

    }

开盖即食:

  生产模式--最终版 2018-12-30

//生产模式--最终版
/*
1.清缓存:npm cache clean -f
2.安装:npm i webpack webpack-cli css-loader clean-webpack-plugin html-webpack-plugin -D
    npm i mini-css-extract-plugin url-loader file-loader optimize-css-assets-webpack-plugin html-withimg-loader -D

*/
const path = require('path');
const CWP = require('clean-webpack-plugin');
const HWP = require('html-webpack-plugin');
const MCEP = require('mini-css-extract-plugin');
const OCAWP = require('optimize-css-assets-webpack-plugin');

const obj = {
    mode:'production',//development 开发模式   、production 生产模式
    entry:{ // 入口
        app:'./app.js',
    },
    output:{ // 出口
        path:path.resolve(__dirname,'build'),
        filename:'./js/[name].js',
    },
    module:{ // 模块
        rules:[ // 规则
            {
                test:/\.css$/,
                use:[
                    {
                        loader:MCEP.loader
                    },
                    'css-loader'
                ]
            },
            {
                test:/\.(jpg|png|gif|svg|bmp)$/,
                use:[
                    {
                        loader:'url-loader',
                        options:{
                            limit:4096,
                            outputPath:'./images',//单独的创建一个文件夹,它的路径基于出口路径(build/js)
                            publicPath:'../images',//引入的路径
                        }
                    }
                ]
            },
            {
                test:/\.html$/,
                use:'html-withimg-loader'
            }
        ]
    },
    plugins:[ // 插件
        new OCAWP(),
        new CWP(['build']),
        new HWP({
            template:'./index.html',
            //filename:'../index.html',//把html和css放在同级,就可以解决手动修改路径的问题。(../css/index.html)
            minify:{
                removeAttributeQuotes:true,
                collapseWhitespace:true,
            }
        }),
        new MCEP({
            filename:'./css[name].css'
        }),
    ]
};
module.exports = obj;

/*
手动修改路径:ctrl+F  统一改一下路径,就可以了。(比如:images/...  ->  ./images/...  ->  ../images/...)
*/

/*
entry  入口:
    字符串、数组、对象
output  出口:
    字符串、对象
module
    rules:[{
        rest:/\.css$/,
        use:['style-loader','css-loader']
        use:'css-loader'
        use:[{
            loader;mxx.loader
            options:{
                limit:32131
            }
        },'css-loader']
    }]
piugins:[1,2]
devServer:{  // 配置
    hotLtrue,
    open:true,
    contentBase:path.resolve(__dirname,'build'),
    host:'localhost',
    port:80
}
*/

//import+css 路径,引入css

例子:

const path = require('path');
const HWP = require('html-webpack-plugin');
const CWP = require('clean-webpack-plugin');
const webpack = require('webpack'); //1.5

const obj = { 
    mode:'production', //development
    entry:{
        index:'./aaa.js',
        // index2:'./2.js'
    },
    output:{
        path:path.resolve(__dirname,'build'),
        filename:'[name].[hash:6].js'
    },
    module:{
        rules:[
            {
                test:/\.css$/,
                //先放style-loader,再放css-loader
                use:['style-loader','css-loader'],
            }
        ]
    },

    plugins:[
        new CWP(['build']),//清除多余js文件,必须放在html的上面
        new HWP({
            template:'./index.html',
            // inject:false    //不放script标签
            // inject:'head'   //把script放到head中
            minify:{
                removeAttributeQuotes:true,//清除属性的引号
                collapseWhitespace:true //把html压缩成一行
            },
            hash:true,//给js文件加?dsua89a
            chunks:['index','index2'],
            title:'世界你好'
        }),
        new webpack.HotModuleReplacementPlugin()//1.8
    ],
    devServer:{
        // contentBase:path.resolve(__dirname,'build'),// 配置开发服务运行时的文件根目录
        host:'localhost',// 开发服务器监听的主机地址
        compress:true,   // 开发服务器是否启动gzip等压缩
        port:80,
        open: true,//自动打开网页
        hot: true //1   
    }
}
module.exports = obj;