初识 webpack

1. 为什么需要 webpack 等构建工具?

  1. 转换 ES6 语法
  2. 转换 JSX
  3. CSS 前缀补全、预处理器
  4. 压缩混淆
  5. 图片压缩

2. 前端构建演变之路

ant + YUI Tool => grunt => fis3 | gulp => rollup | webpack | parcel

代码混淆曾经是通过在线工具,把本地的源代码上传上去然后进行压缩,压缩后再下下来

07 年 08 年的时候, 用 ant 进行本地的压缩

后来 requirejs这些模块化概念的提出,就慢慢演变

演变到了 grunt (将整个构建工程分为一个一个的任务,然后分别执行,然后放到本地磁盘,但是因为 IO 问题,比较慢)

然后到了gulp, gulp 把任务结果放在内存里面,后一个任务使用前一个任务的结果,大大提高了打包的速度。这个时候百度出来了 fis3。

现阶段用的最广泛的就是 rollup | webpack | parcel , webpack 应该是用的最多的吧。

3. 为什么选择 webpack 呢?

  • webpack github starts 多,周下载量高,然后应用的比较广泛,比较多,维护好、更新快

  • 社区生态丰富

  • 配置灵活和插件化扩展

    loader 一大堆,能够满足日常开发需要

    plugin 一大堆,质量也 ok

  • 官方更新迭代速度快

总结下来就是写 webpack 的人很牛逼,webpack 很牛逼,但是文档写的真的烂。

webpack应该算目前最为流行的前端应用工具了吧,不过感觉将来有一天,npm,node,webpack 还是都会被干掉

4. 认识 webpack:webpack 配置的组成

webpack 默认配置文件: webpack.config.js(官方默认)

可以通过 webpack --config 指定配置文件

webpack --config webpack.dev.js

webpack --config webpack.product.js

也就是可以自己指定

module.exports = {
	entry: './src/index.js',		// 入口, 零配置默认为这个
  output: './dist/main.js',		// 输出   零配置默认为这个
  mode: 'production',					// 环境
  module: {
    rules: [
      {test: /.txt$/, use: 'raw-loader'/}		// loader 配置
    ]
  },
      plugins: [															// 插件配置
      	new HtmlwebpackPlugin({
      		template: './src/index.html'
      })
    ]
}

5. 安装 nvm node npm

这个的笔记,就不做了吧。。。(23333 逃

https://www.google.com/

6. 安装 wepack 和 webpack-cli

  1. 创建空目录和 package.json
    .mkdir my-project
    .cd my-project
    .npm init -y

  2. 安装 webpack 和 webpack-cli
    .npm install webpack webpack-cli --save-dev
    (--save-dev 依赖安装到 dev-devdependencies里面,不会安装到 dependencies)
    .检查是否成功 ./node_modules/.bin/webpack -v

  3. 检查
    ./node_modules/.bin/webpack -v

7. 一个简单的例子

确保处于 my-project 目录下面

在根目录下,新建 webpack.config.js

// webpack.config.js
"use strict";

const path = require("path");

module.exports = {
  entry: "./src/index.js",
  output: {
    path: path.join(__dirname, "dist"),
    filename: "bundle.js",
  },
  mode: "production",
};

然后我们新建 src 文件夹,在里面新建一个名为 helloworld 的文件。

// helloworld.js
export function helloworld() {
  return "Hello World";
}

在里面新建一个名为 index.js 的文件。(说白了就是主入口)

// index.js
import { helloworld } from "./helloworld";

document.write(helloworld());

最简单的 demo 就完成了,我们回到根目录,然后执行

./node_modules/.bin/webpack

运行 webpack 打包,打包成功如下。

 $ ./node_modules/.bin/webpack
Hash: 944fb415044424a8d6e2
Version: webpack 4.44.1
Time: 204ms
Built at: 2020-09-09 13:49:40
    Asset       Size  Chunks             Chunk Names
bundle.js  981 bytes       0  [emitted]  main
Entrypoint main = bundle.js
[0] ./src/index.js + 1 modules 131 bytes {0} [built]
    | ./src/index.js 74 bytes [built]
    | ./src/helloworld.js 57 bytes [built]

此时我们便发现 /dist 目录下多了一个 index.js, 在 dist 下面新建一个 html 文件,然后把 index.js 引入进去,就会输出 helloworld

目录结构大概长这个样子。

8. 通过npmscript运行 webpack

// package.json
{
  "name": "my-project",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1",
    "build": "webpack"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "webpack": "^4.44.1",
    "webpack-cli": "^3.3.12"
  },
  "dependencies": {
    "eslint": "^7.8.1"
  }
}

我们通过在 package.json 里的 scripts 属性里配置对应的命令,然后通过 npm run build 来构建。

原理就是:模块局部安装会在 node_modules/.bin目录寻找创建软链接。

然后 运行 npm run build 就行

原文地址:https://www.cnblogs.com/ssaylo/p/13638097.html