webpack简介
webpack是基于模块化的打包(构建)工具,它把一切视为模块(js、css、图片)
它通过一个开发时态的入口模块为起点,分析出所有的依赖关系,然后经过一系列的过程(语法转换、资源压缩、模块合并),最终生成运行时态的文件。
webpack的作用
- 代码转换:将TypeScript编译成Javascript,将SCSS编译成CSS等。
- 文件优化:压缩Javascript、CSS、HTML代码,压缩合并图片等。
- 代码分割:提取多个页面的公共代码,提取首屏不需要执行部分的代码让其异步加载。
- 模块合并:在采用模块化的项目里会有很多个模块和文件,需要通过构建功能将模块分类合并成一个文件。
- 自动刷新:监听本地源代码的变化,自动重新构建、刷新浏览器。
- 代码校验:在代码被提交到仓库前需要校验代码是否符合规范,以及单元测试是否通过。
- 自动发布:更新代码后,自动构建出线上发布代码并传输给发布系统。
webpack的安装
webpack通过npm安装,它提供了两个包:
- webpack:核心包,包含了webpack构建过程中要用到的所有api
- webpack-cli:提供一个简单的cli命令,它调用了webpack核心包的api,来完成构建过程
安装方式:
- 全局安装:可以全局使用webpack命令,但是无法为不同项目对应不同的webpack版本(npm install -g)
- 本地安装:推荐,每个项目都使用自己的webpack版本进行构建(npm install -D)
webpack使用
全局的webpack:
webpack
本地的webpack:
npx webpack
默认情况下,webpack会以./src/index.js
作为入口文件分析依赖关系,打包到./dist/main.js
文件中
通过--mode选项可以控制webpack的打包结果的运行环境
区分环境
有些时候,我们需要针对生产环境和开发环境分别书写webpack配置
为了更好的适应这种要求,webpack允许配置不仅可以是一个对象,还可以是一个函数
npx webpack --env.prod
// webpack.config.js module.exports = env => { if(env && env.prod) { return { mode: ‘production‘, devtool: ‘none‘ } }else { return { mode: ‘development‘, devtool: ‘source-map‘ } } }
这样一来,我们就可以在命令中指定环境,在代码中进行判断,根据环境返回不同的配置结果。