webpack基础学习总结(一)

2021-01-11  本文已影响0人  龙猫六六

webpack

webpack简单理解就是用来对web工程进行打包,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。

webpack基础要素

配置一个基础的webpack工作环境

<body>
    <div class="profile">
        <h1>hello world</h1>
        <script src="main-bundle.js"></script>
    </div>
</body>
const path = require("path")
module.exports = {
    //入口文件
    entry: {
        main:["./src/main.js"]
    },
    //模式
    mode:"development",
    //输出
    output: {
        filename: "[name]-bundle.js",
        path: path.resolve(__dirname, "../dist"),
        publicPath: "/"
    }
}
jc@jc:~/Desktop/技术栈/Webpack/review/react-demo-review$ webpack --config=config/webpack.dev.js 
Hash: cac8d7fee57c157b3bbd
Version: webpack 4.44.2
Time: 56ms
Built at: 01/11/2021 3:33:52 PM
         Asset      Size  Chunks             Chunk Names
main-bundle.js  4.13 KiB    main  [emitted]  main
Entrypoint main = main-bundle.js
[0] multi ./src/main.js 28 bytes {main} [built]
[./src/main.js] 44 bytes {main} [built]

执行后工程目录生成dist/main-bundle.js文件,至此完成基础webpack工程的配置


image.png

webpack-dev-server插件

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "webpack-dev-server --config=config/webpack-dev.js",  
    "build": "webpack ---config=config/webpack-dev.js"
  },

工程根目录执行:
npm run start :打包web工程,并启动本地服务,webpack配置文件为config/webpack-dev.js
npm run build: 打包web工程,打包后文件存储在dist/main-bundle. js文件

  devServer: {
    contentBase:"dist",  //本地工程启动落页,即dist/index.html
    overlay:true   //错误日志能打印在浏览器中
  }

css文件loader

webpack针对css文件的打包,需要使用loader安装css-loader插件来实现

module: {
   rules: [
     {
       test:/\.css$/,
       use: [
         {loader: "style-loader"},
         {loader: "css-loader"}
       ]
     }
   ]
 }

html文件loader

webpack针对html文件的打包,需要使用loader,安装html-loader插件来实现

{
        test:/\.html/,
        use:[
          {
            loader: "file-loader",
            options: {
              name:"[name].html"
            }
          },
          {loader: "extract-loader"},

          {loader: "html-loader"}

file-loaderextract-loader:配合使用,html独立打包到dist,并存储为[name].html文件
html-loader: 让webpack支持html的识别

require("./main.css")
require("./index.html")      //增量
console.log("test")

图片文件loader

webpack针对html文件的打包,需要使用loader,安装file-loader插件来实现

<body>
    <div class="profile">
        <img src="./images/link.jpg" alt="">      //更新,注意路径为当前的路径
        <h1>hello world</h1>
        <script src="/main-bundle.js"></script>
    </div>
</body>
{
        test:/\.(jpg|png|gif)/,
        use: {
          loader: "file-loader",
          options: {
            name:"./images/[name]-[hash:8].[ext]"
          }
        }
      }

babel es语法转换

babel的作用将一些高级的es语法转换为浏览器能够识别的es5语法

require("./main.css")
require("./index.html")

//高级es语法,不通过babel转换部分浏览器识别
var a = async args => {
    const {a, b} = args
    await console.log("hello world", a, b)
    console.log("Done")
}

a({a:1, b:2})
{
  "presets": [
    [
      "env",
      {
        "target": {
          "browsers": ["last 2 version"]
        },
        "debug": true
      }
    ]
  ],
  "plugins": [
    "transform-runtime"
  ]
}

browsers:支持es5 的浏览器
debug:调试
plugins:插件,其中transform-runtime用来运行时优化
3.在main.js 中更新代码

require("babel-runtime/regenerator") //增量
require("./main.css")
require("./index.html")

var a = async args => {
    const {a, b} = args
    await console.log("hello world", a, b)
    console.log("Done")
}
a({a:1, b:2})
  1. webpack配置文件设置babel的loader
    先npm下载babel-loader, npm install -D babel-loader@7.1.5
    在webpack-dev.js的rulues添加对应的loader使用
          {
                test: /\.js$/,
                use: [
                    {loader: "babel-loader"}
                ],
                exclude: /node_modules/  // 排除node_modules文件夹下的loader的转换
            },

5.执行webpakc打包, npm run build
打包后的main-bundle.js将高级es语法成功转换为es5语法


image.png
上一篇下一篇

猜你喜欢

热点阅读