webpack基础解析(一)

332 阅读2分钟

学习过webpack基础配置的童鞋都能快速写出一套基础的配置方案,我本人属于用起来还行,但是具体说说他们的原理和差异就有点张不开嘴,趁着现在重新着手一个新项目,把这些好好捋一捋!!!

1. webpack/webpack-cli

webpack是代码打包工具,可以分析js代码里面各种引入的依赖关系。

webpack-cli是用于运行webpack的命令工具包。

对于一个纯净的项目,其中入口文件代码如下:

import { join } from "lodash"function component() {  const element = document.createElement('div');  // Lodash, currently included via a script, is required for this line to work  element.innerHTML = join(['Hello', 'webpack'], ' ');  return element;}document.body.appendChild(component());

如果引入webpack,直接在命令行工具中运行【不需要任何配置文件】:

npm init -y
npm install --save-dev webpack webpack-cli
npx webpack

会自动生成一个dist文件夹,默认 入口文件是src/index.js, 默认打包后文件是dist/main.js,此时需要在index.html中手动引入dist/main.js

其生成的文件默认是production模式!

如果想要查看生成的代码,可以使用development模式:

npx webpack --mode=development

其中import是ES2015的语法,某些低版本的浏览器即使不支持import/export这个新语法,但是webpack支持它,并会将其处理成老版本浏览器也支持的形式。

另外,webpack除了import/export 的ES2015新语法之外,不支持任何其他的ES2015语法,如果需要处理其他语法,需要引入其他处理如babel-loader等!

2. 按需加载

如上的代码中引入import时,虽然是通过解构方式引入,但是打包后的文件还是包含整个lodash文件。不会自动进行按需加载!!

要想实现按需加载,有两种方式:

  • 1. 手动按需加载

    import join from "lodash/join";

  • 2. 使用Tree Shaking

Tree shaking是一个在js中去除未使用代码的术语。它本身依赖于ES2015的语法import/export。上面的代码未进行按需加载,说明使用的不是ES6的导出形式。

 查看node_modules可知,其导出形式为module.exports = xxxx

那么我们应该换一个lodash导出形式为export的库。

首先,将无用的库删除

npm uninstall lodash

其次,查找lodash相关库,发现有lodash-es。

根据其提示需要安装lodash-es(V4.17,21),不需要任何其他额外操作:

npm install lodash-es

然后,修改代码引入:

import {join} from "lodash-es";

3. 配置文件webpack.config.js

当项目稍微复杂点时,需要引入配置文件。简化操作。