自动打包工具 webpack 2

2019-09-29  本文已影响0人  squidbrother

针对wepack学习1部分补充:

热更新部分

安装:npm install webpack-dev-server -D
webpack关于热更新服务器的配置:

module.exports={
    devServer:{
        port:3000,  //端口号
        progress:true,  //启动进程
        contentBase:'./build/',  //调试根路径位置
        compress:true  //压缩
    },
    ...
}

如果要用静态文件引入打包的JS文件,如果在热更新状态下,需要将引入路径指向 (调试路径contentBase)

html-webpack-plugin

根据模板,打包后自动生成html文件,并引入进JS打包文件
配置: 压缩信息、模板选择、新文件名定义

plugins:[
      new HtmlWebpackPlugin({ // 打包输出HTML
      title: 'Hello World app',
      minify: { // 压缩HTML文件
        removeComments: true, // 移除HTML中的注释
        collapseWhitespace: true, // 删除空白符与换行符
        minifyCSS: true// 压缩内联css
      },
      hash:true,  
      filename: 'index.html',
      template: './src/template/index.html'  //模板文件路径
    })
]
缓存hash值 (防止缓存影响)

打包js增加hash值
所有的hash值的位数,自行定义即可

module.exports={
    ...,
        output:{
        path:path.resolve(__dirname,'build/'),
        filename:'bundle.[hash:5].js'  //打包文件 5位hash值
    },
    plugins:[
          new HtmlWebpackPlugin({ 
          minify: { 
            removeComments: false,
            collapseWhitespace: true,
            minifyCSS: true
          },
          hash:true,   //增加hash值
          filename: 'index.[hash:3].html', //模板文件 增加 3位的hash值
          template: path.resolve(__dirname,'src/template/index.html')
        }),
            new MiniCssExtractPlugin({
            filename:'main.min.[hash:8].css'  //样式提取到一个css,增加hash值
        })
    ]
}
将所有css提取到一个css文件中

安装:

npm install mini-css-extract-plugin -D

使用:
webpack.config.js中配置:

...
plugins:[
    //压缩文件配置
    new MiniCssExtractPlugin({
        filename:'main.min.css' //压缩后的新名
    })
]
....
module:{
    //压缩文件规则
        rules:[
        {test:/\.css$/,use:[
            MiniCssExtractPlugin.loader,
            'css-loader'
        ]}
    ]
}
css3格式兼容

安装:

npm install postcss-loader autoprefixer -D

使用:
安装新的格式要求,需要将浏览器配置信息挪到,package.json中,如:

"browserslist":[
    "defaults",
    "not ie < 11",
    "last 2 versions",
    "> 1%",
    "iOS 7",
    "last 3 iOS versions"
]

在webpack.config.js中

{
   loader: 'postcss-loader',
   options: {
      sourceMap: true,
      config: {
        path: 'postcss.config.js'  // 这个得在项目根目录创建此文件
      }
   }
}
压缩css与js 打包文件

安装:

npm install optimize-css-assets-webpack-plugin -D //css压缩
npm install uglifyjs-webpack-plugin -D  //js压缩   

注意:
1.不能光压缩css,js也要压缩,否则JS不会压缩
2.js压缩需要babel模块支持,否则报错
3.css与js压缩仅能在 "production"模式下,生效
使用:
webpack.config.js中

const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');

optimization: {
    minimizer: [
        new OptimizeCSSAssetsPlugin({}),
        new UglifyJsPlugin({
            test: /\.js(\?.*)?$/i
        })
    ],
}
针对es6中类与装饰器

安装:

npm install @babel/plugin-proposal-class-properties -D  //类
npm install @babel/plugin-proposal-decorators -D  //装饰器

使用:

{
    test:/\.jsx?/i,
    exclude:/node_modules/,  //如果引入了node_modules中的包,不要编译
    use:{
        loader:'babel-loader',
        options:{
            presets:['@babel/preset-env'],
            plugins:[
                ["@babel/plugin-proposal-decorators", { "legacy": true }],
                ["@babel/plugin-proposal-class-properties", { "loose": true }]
            ]
        }
    }   
}
html中image打包

说明:
webpack处理资源无往不利,但有个问题总是很苦恼,
html中直接使用img标签src加载图片的话,因为没有被依赖,图片将不会被打包。
这个loader解决这个问题,图片会被打包,而且路径也处理妥当。

安装:

npm install html-withimg-loader -D

使用:
在webpack.config.js中

rules:[ 
    {
        test:/\.html$/,
        use:'html-withimg-loader'
    }
]
暴露

以jquery为例
npm install jquery -S

//----将一个$依赖挂载到window上
安装:

npm install expose-loader -D

使用:
在模块中,

import $333 from 'expose-loader?$333!jquery';

console.log(window.$333); //可以找到
console.log($333); //可以找到

//----将一个$依赖挂载到所有模块上
安装:webpack webpackcli

使用:
在webpack.config.js中,

plugins:[
    new webpack.ProvidePlugin({
        $:'jquery'
    })
]

在任意模块内,可以使用$了,无需单独引入jquery库

上一篇下一篇

猜你喜欢

热点阅读