美文网首页
webpack基础学习总结(一)

webpack基础学习总结(一)

作者: 龙猫六六 | 来源:发表于2021-01-11 17:49 被阅读0次

webpack

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

  • webpack:含有几要素(entry,入口;mode,模式,output,输出)
  • loader:(插件,webpack兼容不同文件类型)由于webpack设计之初只能对js文件进行打包,因此后期衍生出插件loader来对诸如css,图片,html进行打包;
  • babel:(插件,webpack转换浏览器可识别的es语法)其次es语法和浏览器的兼容性问题,往往需要将高级es语法转换为浏览器可识别的es5格式,这个转换过程需要使用bable插件

webpack基础要素

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

    1. ·webpack·基础目录结构包括
      config:文件夹,含有webpack配置文件webpack.dev.js
      dist:webpack打包的文件存储文件夹
      src:源码文件存储文件夹
      package.json:npm配置文件
      .babelrc: babe配置文件
      具体文件接口如图
      image.png
    1. npm init 初始化npm,生成package.json文件
      git init初始化git, 生成.git文件夹
    1. src文件夹新建main.js文件,作为webpack入口文件
    1. dist文件夹新建index.html文件,index.html如下
<body>
    <div class="profile">
        <h1>hello world</h1>
        <script src="main-bundle.js"></script>
    </div>
</body>
    1. config文件夹新建webpack.dev.js文件,用来设置webpack配置文件
const path = require("path")
module.exports = {
    //入口文件
    entry: {
        main:["./src/main.js"]
    },
    //模式
    mode:"development",
    //输出
    output: {
        filename: "[name]-bundle.js",
        path: path.resolve(__dirname, "../dist"),
        publicPath: "/"
    }
}
  • 6.webpack命令行执行打包webpack --config=config/webpack.dev.js
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插件

  • webpack-dev-server插件的作用是本地启服务,便于调试。
    插件安装:npm install -D webpack-dev-server
    配置npm启动命令:在package.json配置scripts脚本,如下:
"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文件

  • webpack-dev.js对webpack-dev-server的配置
  devServer: {
    contentBase:"dist",  //本地工程启动落页,即dist/index.html
    overlay:true   //错误日志能打印在浏览器中
  }

css文件loader

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

  • 安装loader插件:
    style-loader:将css文件加载到html中
    css-loader:识别css文件
    安装指令: npm install -D style-loader@2.0.0 css-loader@5.0.1
  • webpack配置文件配置
    test:适配的文件,正则匹配
    use: 需要装载的loader
module: {
   rules: [
     {
       test:/\.css$/,
       use: [
         {loader: "style-loader"},
         {loader: "css-loader"}
       ]
     }
   ]
 }
  • webpack-dev-server启动本地服务
    npm start ("webpack-dev-server --config=config/webpack-dev.js")
    访问本地http://localhost:8080/ css被正常加载

html文件loader

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

  • 将dist/index.html 移动到src/index.html路径下
  • 安装html-loader插件, npm install -D html-loader@1.3.2
  • 配置webpack-dev.js文件, module/rules增量更新
{
        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的识别

  • main.js入口文件require html文件
require("./main.css")
require("./index.html")      //增量
console.log("test")
  • 执行npm start本地启服务/npm run build打包
    发现dist文件夹下生成打包后的html

图片文件loader

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

  • 修改index.html,加载对图片的渲染
<body>
    <div class="profile">
        <img src="./images/link.jpg" alt="">      //更新,注意路径为当前的路径
        <h1>hello world</h1>
        <script src="/main-bundle.js"></script>
    </div>
</body>
  • 配置webpack-dev.js文件, module/rules增量更新
{
        test:/\.(jpg|png|gif)/,
        use: {
          loader: "file-loader",
          options: {
            name:"./images/[name]-[hash:8].[ext]"
          }
        }
      }
  • 执行npm start本地启服务/npm run build打包
    发现dist文件夹下生成打包后的图片


    image.png

babel es语法转换

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

  • main.js编写高版本的es语言,作为测试数据
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})
  • 新建bable配置文件.babelrc
    在工程根目录,新建.babelrc用来设置babel对应的插件

  • 安装bable转换插件presets
    1.安装插件babel-preset-env, npm install -D babel-preset-env@1.7.0, presets能够自动下载对应babel依赖的插件
    2.在.babelrc进行配置

{
  "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

相关文章

网友评论

      本文标题:webpack基础学习总结(一)

      本文链接:https://www.haomeiwen.com/subject/nxjdaktx.html