简介
- webpack中文网
- webpack
Chunk
:webpack打包的过程种,生成的JS文件,每一个JS文件我们都把它叫做Chunk。如main.js的chunk Name是main- chunks默认值是async,异步代码才进行分割;如果我们想同步和异步的都进行代码分割,需要改为all
配置
webpack.config.js
1 | const path = require('path'); |
module配置
- 将代码分解成chunk,并称之为模块。在解析模块的过程中涉及到对不同的语言(es6/ts/commonjs/css/less等)进行解析,以下为解析规则的相关配置
- module配置文档
- webpack-chain 链式配置
1 | module.exports = { |
外网访问
1 | // vue3 vue.config.js |
环境变量
- EnvironmentPlugin/DefinePlugin/DotenvPlugin
- 定义环境变量,其他js文件中使用
process.env.API_URL
即可,也可直接使用API_URL
,环境变量运行时或者打包都会被替换成真实值(如果没定义环境变量,则打包时报错,如果直接引用node_modules里面的由于不会有打包过程,所以就会变成浏览器js报错)
- 定义环境变量,其他js文件中使用
- webpack.dev.config.js
1 | plugins: [ |
也可基于cross-env进行操作:
npm i cross-env -D
安装cross-env插件package.json
1
2
3
4"scripts": {
"cross-env": "cross-env API_URL=http://192.168.17.50:8050/ffs-crm/crm",
"dev": "webpack-dev-server --content-base ./ --open --inline --hot --compress --config build/webpack.dev.config.js --port 7710",
},启动时可以覆盖此参数
npm run cross-env API_URL=http://localhost:8050/ffs-crm/crm npm run dev
配置API代理解决跨域问题
- 一般配置在
build/webpack.dev.conf.js
文件中,也可直接在config/index.js
中的dev.proxyTable
中修改
1 | // 参考:https://github.com/chimurai/http-proxy-middleware |
index.html
- 变量替换
- 依赖html-webpack-plugin模块
1 | <link rel="icon" href="<%= BASE_URL %>favicon.ico"> |
Loaders
- script-loader
- 全局上下文中执行一次 JS 脚本
- 异步按顺序引入 JS 文件到全局
生态
- webpack-chain 链式配置
- https://www.jianshu.com/p/2dd631158344
console.log(config.toString())
打印配置- 如果修改需要merge可使用
npm install --save-dev webpack-merge
,然后const { merge } = require('webpack-merge');
Webpack模块打包原理
Chrome调试说明
- 在chrome调试工具 - Sources 中查看源码
sqbiz-plugin-minions-[name]
模块源码,此名称为output.library配置值webpack-internal://
模块编译后代码。调试时默认是调试此文件夹下代码,如果设置了sourceMapping,则会自定映射到源码上,从而可直接调试源码
打包案例
- 案例 ^1
1 | // a.js (entry js) |
结合babel
- babel 会将 es6 语法转换成 commonjs 语法。即将所有输出都赋值给 commonjs 的 exports,并带上一个标志 __esModule 表明这是个由 es6 转换来的 commonjs 格式,然后采用 require 去引用模块
1 | // (1) 解决 default 问题 |
复杂案例
打包复杂案例
1 | // my-app 打包成 app.js |
webpack_require各属性
__webpack_require__()
,约等于import能力,可以加载某模块
1 | // 入口模块的ID |
Webpack转译Typescript现有方案
参考文章