深入webpack|青训营笔记

46 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第7天

深入webpack

搭建vue开发环境

将index.html的body部分修改为<div id="app"></div>

安装vue

安装vue-loader

loader用于对源码的转换,vue-loader当然是转换vue源代码

同时需要安装vue

npm install vue
npm install -D vue-loader

修改webpack.config.js

引入vueloader

在plugins中添加new VueLoaderPlugin()

在module->rules中添加{test:/.vue%/,loader:'vue-loader'}

安装HtmlWebpackPlugin

htmlwebpackplugin可以自动将js引入html,也可以指定html模板

npm install -D html-webpack-plugin

修改webpack.config.js

在plugins中添加new HtmlWebpackPlugin()

安装babel-loader(可选)

可以将es6语法转换为es5以供浏览器识别

npm install -D babel-loader

修改webpack.config.js

在rules里添加一条

{
    test:/.js$/,
    exclude:/node_modules/,
    use:{
        loader:"babel-loader"
    }
}

配置resolve

配置模块如何解析,可以在引入模块时无需加上后缀,自动按顺序引入

并且可以配置别名

修改webpack.config.js,加入

resolve:{
    extensions:['.vue','.js','.json'],
    alias:{
        '@':resolve(__dirname,'src')
    }
}

使用CSS预处理器(可选)

一般使用sass或less

npm install sass -D
npm install sass-loader

在rules中新增规则

{
    test:/.s[ac]ss/,
    use:[
        'style-loader',
        'css-loader',
        'sass-loader'
    ]
}

依次引入style-loader``css-loader``sass-loader

执行顺序为从上到下。

style-loader将js转换为style dom

css-loader将css转换为js模块

sass-loader将sass编译为css

使用less

安装less-ader

npm install -D less less-loader

修改webpack.config.js,rules添加一条

{
    test:/.less/,
    use:[
        "style-loader",
        "css-loader",
        "less-loader"
    ]
}

提取CSS

使用minicssextractplugin

npm install -D mini-css-extract-plugin

然后进行配置

plugins:[
    new MiniCssExtractPlugin({
        filename:'assets/css/[name].style.css',
        chunkFilename:'assets/css/[name].css'
    })
]

将rules中style-loader替换为MiniCssExtractPlugin.loader

压缩css

使用CssMinizerWebpackPlugin

npm install -D css-minimizer-webpack-plugin 

修改webpack.config.js

optimization:{
    minimizer:[
        new CssMinimizerPlugin()
    ]
}

这将仅在生产环境开启 CSS 优化。

如果还想在开发环境下启用 CSS 优化,请将 optimization.minimize 设置为 true

代码分离

使用splite-chunksplugin将公共的依赖模块提取到已有的入口chunk中,或者提取到一个新的chunk中

optimization:{
    splitChunks:{
        chunks:'all'
    }
}

构建优化 使用CDN

externals:{
    'vue':'Vue'
}

这样引入vue时就会使用来自CDN的全局Vue对象

通过配置external来防止某些包被打包到bundle中

接下来只需要在html模板中引入cdn即可