webpack4.x 入门

前言:

webpack4出了以后,一些插件变化很大,和之前的版本使用方式不一样,新手入坑,本篇将介绍如何从一开始配置webpack4的开发版本,对css,js进行编译打包合并生成md5,CSS中的图片处理,js自动注入html页,删除指定文件,提取公共文件热更新等等。

安装


     
     
  1. //全局安装
  2. npm install -g webpack webpack-cli

创建文件夹初始化


    
    
  1. //创建文件夹
  2. mkdir webpack4demo
  3. //进入
  4. cd webpack4demo
  5. //初始化
  6. npm init -y

创建文件夹scripts 里面创建index.js文件

index.js


    
    
  1. const s=()=>{
  2. console.log( 's init')
  3. }
  4. s()

创建webpack.config.js文件

webpack.config.js


    
    
  1. const path = require( "path");
  2. module.exports = {
  3. entry: {
  4. index: "./scripts/index.js" //入口文件,若不配置webpack4将自动查找src目录下的index.js文件
  5. },
  6. output: {
  7. filename: "[name].bundle.js",//输出文件名,[name]表示入口文件js名
  8. path: path.join(__dirname, "dist")//输出文件路径
  9. }
  10. }

执行webpack --mode development将会生成dist/index.bundle.js


创建index.html,并引入js


    
    
  1. <!DOCTYPE html>
  2. <html lang= "en">
  3. <head>
  4. <meta charset= "UTF-8">
  5. <title> $Title$</title>
  6. </head>
  7. <body>
  8. $END$
  9. </body>
  10. <script src= "./dist/index.bundle.js"></script>
  11. </html>

打开浏览器将会看到之前设置的js文件生效

对css,js进行编译打包合并生成md5

创建a.js,c.js,a.css,更改index.js

a.js


     
     
  1. import acss from './a.css'
  2. import c from './c.js'
  3. const a={
  4. init(){
  5. console.log( "a init bbbaaa")
  6. },
  7. cinit(){
  8. c.init()
  9. }
  10. }
  11. export default a;

c.js


    
    
  1. const c={
  2. init(){
  3. console.log( "ccccc")
  4. }
  5. }
  6. export default c;

a.css


    
    
  1. body{
  2. background-color: #6b0392;
  3. }

index.js


    
    
  1. import a from './a.js'
  2. import c from './c.js'
  3. const s=()=>{
  4. a.init()
  5. a.cinit()
  6. c.init()
  7. console.log( 's init')
  8. }
  9. s()

配置webpack.config.js文件


    
    
  1. const path = require( "path");
  2. module.exports = {
  3. entry: {
  4. index: "./scripts/index.js"
  5. },
  6. output: {
  7. filename: "[name].bundle.[hash].js",//[ hash]会在后面生成随机 hash
  8. path: path.join(__dirname, "dist")
  9. },
  10. module: { // 处理对应模块
  11. rules: [
  12. {
  13. test: /\.css$/,
  14. use: [ 'style-loader', 'css-loader' ]//处理css
  15. }
  16. ]
  17. },
  18. }

安装style-loader, css-loader

npm install style-loader css-loader --save-dev

    
    

执行webpack --mode development将会看到一个带md5值得js文件,将他引入html中

CSS中的图片处理

安装url-loader, file-loader

npm install url-loader file-loader --save-dev

     
     

修改a.css 将一张图片放到scripts目录


    
    
  1. body{
  2. background-image: url( "./timg.jpg");
  3. background-color: #a748ca;
  4. }

配置webpack.config.js文件


    
    
  1. module: {
  2. rules: [
  3. {
  4. test: /\.css$/,
  5. use: [ 'style-loader', 'css-loader' ]
  6. },
  7. {
  8. test:/\.(png|jpg|gif)$/,
  9. use:[{
  10. loader: 'url-loader',
  11. options:{
  12. outputPath: 'images/',//输出到images文件夹
  13. limit:500 //是把小于500B的文件打成Base64的格式,写入JS
  14. }
  15. }]
  16. }
  17. ]
  18. },

执行webpack --mode development将会看到dist中有一个images文件夹中有一张图片,打开index.html


js自动注入html文件

使用插件html-webpack-plugin,可以将生成的js自动引入html页面,不用手动添加


     
     
  1. //安装html-webpack-plugin
  2. npm install html-webpack-plugin --save-dev
  3. //安装webpack webpack-cli
  4. npm install webpack webpack-cli --save-dev

配置webpack.config.js文件


    
    
  1. const path = require( "path");
  2. const HtmlWebpackPlugin = require( 'html-webpack-plugin');//引入html-webpack-plugin
  3. module.exports = {
  4. entry: {
  5. index: "./scripts/index.js"
  6. },
  7. output: {
  8. filename: "[name].bundle.[hash].js",
  9. path: path.join(__dirname, "dist")
  10. },
  11. module: {
  12. rules: [
  13. {
  14. test: /\.css$/,
  15. use: [ 'style-loader', 'css-loader' ]
  16. }
  17. ]
  18. },
  19. plugins: [// 对应的插件
  20. new HtmlWebpackPlugin({ //配置
  21. filename: 'index.html',//输出文件名
  22. template: './index.html',//以当前目录下的index.html文件为模板生成dist/index.html文件
  23. }),
  24. ]
  25. }

执行webpack --mode development 记得要讲之前手动引入的script删除,便可以看到dist那里自动生成一个index.html,打开便可以看到。

删除指定文件

使用插件clean-webpack-plugin,删除指定文件,更多配置,查看clean-webpack-plugin

npm install clean-webpack-plugin --save-dev
     
     

配置webpack.config.js文件


    
    
  1. const CleanWebpackPlugin = require( 'clean-webpack-plugin');//引入
  2. plugins: [// 对应的插件
  3. new HtmlWebpackPlugin({ //配置
  4. filename: 'index.html',//输出文件名
  5. template: './index.html',//以当前目录下的index.html文件为模板生成dist/index.html文件
  6. }),
  7. new CleanWebpackPlugin([ 'dist']), //传入数组,指定要删除的目录
  8. ]

执行webpack --mode development,可以看到dist目录被删除,又生成一个新的dist,之前的js文件已经被删除。

提取公共文件

我们可看到a.js和index.js都引入了c.js文件,为什么要提取公共代码,简单来说,就是减少代码冗余,提高加载速度。和之前的webpack配置不一样:


     
     
  1. //之前配置
  2. // new webpack.optimize.SplitChunksPlugin({
  3. // name: 'common', // 如果还要提取公共代码,在新建一个实例
  4. // minChunks: 2, //重复两次之后就提取出来
  5. // chunks: [ 'index', 'a'] // 指定提取范围
  6. // }),
  7. //现在配置
  8. optimization: {
  9. splitChunks: {
  10. cacheGroups: {
  11. commons: { // 抽离自己写的公共代码
  12. chunks: "initial",
  13. name: "common", // 打包后的文件名,任意命名
  14. minChunks: 2,//最小引用2次
  15. minSize: 0 // 只要超出0字节就生成一个新包
  16. },
  17. vendor: { // 抽离第三方插件
  18. test: /node_modules/, // 指定是node_modules下的第三方包
  19. chunks: 'initial',
  20. name: 'vendor', // 打包后的文件名,任意命名
  21. // 设置优先级,防止和自定义的公共代码提取时被覆盖,不进行打包
  22. priority: 10
  23. },
  24. }
  25. }
  26. },

下载jq npm install jquery --save 在a.js,index.js引用 import $ from 'jquery' 输出$

生成3个js文件,执行webpack --mode development


热更新,自动刷新

我们将用到webpack-dev-servewebpack-dev-server就是一个基于Node.jswebpack的一个小型服务器,它有强大的自动刷新热替换功能。

安装webpack-dev-serve

npm install webpack-dev-serve --save-dev
    
    

配置webpack.config.js文件


    
    
  1. const webpack = require( "webpack");
  2. plugins: [
  3. new HtmlWebpackPlugin({
  4. filename: 'index.html',
  5. template: './index.html',
  6. }),
  7. new CleanWebpackPlugin([ 'dist']), //传入数组,指定要删除的目录
  8. // 热更新,热更新不是刷新
  9. new webpack.HotModuleReplacementPlugin()
  10. ],
  11. devServer: {//配置此静态文件服务器,可以用来预览打包后项目
  12. inline: true,//打包后加入一个websocket客户端
  13. hot: true,//热加载
  14. contentBase: path.resolve(__dirname, 'dist'),//开发服务运行时的文件根目录
  15. host: 'localhost',//主机地址
  16. port: 9090,//端口号
  17. compress: true//开发服务器是否启动gzip等压缩
  18. },

配置package.json


    
    
  1. "scripts": {
  2. "dev": "webpack-dev-server --mode development"
  3. },

执行npm run dev 访问 http://localhost:9090/

随便修改任一文件便会自动刷新网站显示修改相应内容。

总结:

webpack4还有很多很多配置,例如css的拆分呀,less sass配置呀,js编译es6呀,多入口配置呀,生产环境配置,js没有使用的模块自动检测剥离等等,只能等下次有空在总结,感谢大家的观看,新手入坑,欢迎指出错误的地方。


作者:eternalless
链接:https://juejin.im/post/5b2b9a00e51d45587b48075e
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值