akfun 5.1.8 → 5.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -1,161 +1,88 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
> 全局安装AKFun,用于同时管理多个前端项目代码(可使用AKFun创建一个新项目)
|
|
18
|
-
|
|
19
|
-
1. **全局安装**
|
|
1
|
+
## AKFun 前端脚手架
|
|
2
|
+
AKFun 是一个基于 Webpack 与 Rollup 的多场景前端打包工具,支持 Vue、React、React+TS 技术栈,致力于提供“零配置、开箱即用”的工程能力,让开发者专注业务。
|
|
3
|
+
|
|
4
|
+
### 主要特性
|
|
5
|
+
- **零配置**: 内置默认配置,开箱即用;
|
|
6
|
+
- **多技术栈**: 支持 Vue、React、React+TS 的调试与构建;
|
|
7
|
+
- **多构建场景**: 本地开发(含热更新/代理)、生产构建、库构建(UMD/ESM);
|
|
8
|
+
- **灵活可配**: 支持入口、别名、代理、SASS 注入、ESLint/StyleLint、Babel/Loader/Plugin 扩展等配置;
|
|
9
|
+
- **样式与规范**: 集成 Autoprefixer、Sass、PostCSS、ESLint、StyleLint;
|
|
10
|
+
- **参数替换**: 支持基于 [params-replace-loader](https://www.npmjs.com/package/params-replace-loader) 的环境变量批量替换;
|
|
11
|
+
- **模板支持**: 提供完整的 Vue/React 项目模板。
|
|
12
|
+
|
|
13
|
+
## 快速开始
|
|
14
|
+
|
|
15
|
+
### 方法一:全局安装
|
|
16
|
+
1) 安装
|
|
20
17
|
```bash
|
|
21
|
-
|
|
18
|
+
yarn global add akfun
|
|
19
|
+
# 或
|
|
20
|
+
npm i -g akfun
|
|
22
21
|
```
|
|
23
|
-
|
|
24
|
-
2. **初始化一个项目**
|
|
25
|
-
> 可选择项目类型:vue或者react,默认react类型的项目,也可通过--dir参数指定存放项目模板的目录
|
|
22
|
+
2) 创建项目(可指定模板与目录)
|
|
26
23
|
```bash
|
|
27
|
-
|
|
24
|
+
akfun init -t=vue
|
|
25
|
+
# 指定目录
|
|
26
|
+
akfun init -t=vue --dir=myTest1
|
|
28
27
|
```
|
|
28
|
+
3) 运行构建(需先安装依赖)
|
|
29
|
+
```bash
|
|
30
|
+
# 本地开发调试
|
|
31
|
+
akfun dev
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
# 生产环境构建
|
|
34
|
+
akfun build
|
|
31
35
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
$ akfun dev
|
|
35
|
-
```
|
|
36
|
+
# 构建库(UMD)
|
|
37
|
+
akfun build2lib
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
$ akfun build
|
|
39
|
+
# 构建库(ESM)
|
|
40
|
+
akfun build2esm
|
|
40
41
|
```
|
|
41
42
|
|
|
43
|
+
### 方法二:在现有项目中使用
|
|
44
|
+
1) 安装到当前项目
|
|
42
45
|
```bash
|
|
43
|
-
|
|
44
|
-
|
|
46
|
+
yarn add akfun --dev
|
|
47
|
+
# 或
|
|
48
|
+
npm i akfun --save-dev
|
|
45
49
|
```
|
|
46
|
-
|
|
50
|
+
2) 在 package.json 添加脚本
|
|
47
51
|
```bash
|
|
48
|
-
|
|
49
|
-
|
|
52
|
+
"dev": "akfun dev",
|
|
53
|
+
"build": "akfun build",
|
|
54
|
+
"build2lib": "akfun build2lib",
|
|
55
|
+
"build2esm": "akfun build2esm"
|
|
50
56
|
```
|
|
51
|
-
|
|
52
|
-
## 快速开始 / 使用方法二
|
|
53
|
-
> 在现有项目中局部安装AKFun,给现有项目赋予AKFun的前端工程能力
|
|
54
|
-
|
|
55
|
-
1. **本地安装**
|
|
56
|
-
|
|
57
|
+
3) 初始化配置文件(按需调整入口、别名、代理等)
|
|
57
58
|
```bash
|
|
58
|
-
|
|
59
|
+
akfun config init
|
|
59
60
|
```
|
|
60
|
-
|
|
61
|
-
2. **在package.json中创建可执行脚本**
|
|
62
|
-
> 打开package.json,在scripts中新增三条可执行命令
|
|
63
|
-
|
|
61
|
+
4) 开发与构建
|
|
64
62
|
```bash
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
"build": "akfun build"
|
|
70
|
-
|
|
71
|
-
# 用于构建第三方功能包(以umd格式输出)
|
|
72
|
-
"build2lib": "akfun build2lib"
|
|
73
|
-
|
|
74
|
-
# 用于构建第三方功能包(以esm格式输出)
|
|
75
|
-
"build2esm": "akfun build2esm"
|
|
63
|
+
npm run dev
|
|
64
|
+
npm run build
|
|
65
|
+
npm run build2lib
|
|
66
|
+
npm run build2esm
|
|
76
67
|
```
|
|
77
68
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
4. **开始构建当前项目**
|
|
86
|
-
|
|
87
|
-
4.1 开启本地调试模式
|
|
88
|
-
```bash
|
|
89
|
-
$ npm run dev
|
|
90
|
-
```
|
|
91
|
-
4.2 构建生产环境代码
|
|
92
|
-
```bash
|
|
93
|
-
$ npm run build
|
|
94
|
-
```
|
|
95
|
-
4.3 构建第三方功能包(以umd格式输出)
|
|
96
|
-
```bash
|
|
97
|
-
$ npm run build2lib
|
|
98
|
-
```
|
|
99
|
-
4.4 构建第三方功能包(以esm格式输出)
|
|
100
|
-
```bash
|
|
101
|
-
$ npm run build2esm
|
|
102
|
-
```
|
|
69
|
+
## 常用命令
|
|
70
|
+
- **akfun init**: 交互式创建项目(支持 -t、--dir)。
|
|
71
|
+
- **akfun config init**: 在当前项目生成 `akfun.config.js`。
|
|
72
|
+
- **akfun dev**: 本地开发调试(含热更新、接口代理、可选 HTTPS、可选 ESLint/StyleLint)。
|
|
73
|
+
- **akfun build**: 生产环境构建(压缩优化、可选分析)。
|
|
74
|
+
- **akfun build2lib**: 构建 UMD 库产物。
|
|
75
|
+
- **akfun build2esm**: 构建 ESM 库产物。
|
|
103
76
|
|
|
104
|
-
##
|
|
77
|
+
## 多页面与模板
|
|
78
|
+
- 当 `entry` 仅配置一个且对应文件不存在时,会自动从 `src/pages` 扫描以 `.ts/.tsx/.js/.jsx` 结尾的文件作为入口,匹配同名 HTML 作为模板(对应正则 `/\.[tj]sx?$/`)。
|
|
79
|
+
- 仅 `dev` 和 `build` 使用页面模板;`build2lib` 不向页面注入打包产物。
|
|
80
|
+
- 优先使用 `./src/index.html`;不存在时使用内置默认模板。多页面时若 `pages` 下存在同名 HTML,将其作为页面模板。
|
|
105
81
|
|
|
106
|
-
|
|
82
|
+
## 配置说明(akfun.config.js)
|
|
83
|
+
AKFun 默认提供完整配置;如需自定义,执行 `akfun config init` 生成 `akfun.config.js` 并按需修改。以下为常用配置。
|
|
107
84
|
|
|
108
|
-
|
|
109
|
-
```bash
|
|
110
|
-
$ akfun init
|
|
111
|
-
```
|
|
112
|
-
1.2 创建一个vue类型项目
|
|
113
|
-
```bash
|
|
114
|
-
$ akfun init -t=vue
|
|
115
|
-
```
|
|
116
|
-
1.3 在指定的目录中创建一个新项目
|
|
117
|
-
```bash
|
|
118
|
-
$ akfun init -t=vue --dir=myTest1
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
2. **创建AKFun的配置文件**
|
|
122
|
-
```bash
|
|
123
|
-
$ akfun config init
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
3. **关于AKFun提供三种构建场景**
|
|
127
|
-
1. **dev**: 本地开发调试模式,用于本地开发和调试项目(包含热更新、接口代理等功能),编译的代码没有压缩,默认会开启ESLint检测代码规范(可关闭)
|
|
128
|
-
2. **build**: 用于构建生产环境代码,编译输出的代码会进行压缩优化
|
|
129
|
-
3. **build2lib**: 用于构建library库,以umd进行输出
|
|
130
|
-
4. **build2esm**: 用于构建library库,以esm进行输出
|
|
131
|
-
|
|
132
|
-
4. **关于AKFun的配置文件**
|
|
133
|
-
1. AKFun会提供全量的默认配置,实现零配置、开箱即用的能力
|
|
134
|
-
2. 自定义构建配置,请在当前项目根目录创建AKFun配置文件(akfun.config.js),AKFun提供初始化配置文件的方法:
|
|
135
|
-
```bash
|
|
136
|
-
$ akfun config init
|
|
137
|
-
```
|
|
138
|
-
3. akfun.config.js为当前项目的配置文件,优先级最高(可覆盖AKFun提供的默认配置)
|
|
139
|
-
|
|
140
|
-
5. **配置构建入口文件(webpack.entry)**
|
|
141
|
-
1. 默认的构建入口文件: ./src/index.js
|
|
142
|
-
2. 自定义构建入口(akfun.config.js中提供对应的配置入口)
|
|
143
|
-
1. 在webpack.entry配置构建入口,dev\build\build2lib都会以此为构建入口 ([关于entry的配置方法](https://www.webpackjs.com/configuration/entry-context/#entry))
|
|
144
|
-
2. 在dev.entry、build.entry、build2lib.entry中配置对应执行环境的构建入口,优先级高于webpack.entry
|
|
145
|
-
|
|
146
|
-
6. **关于多页面**
|
|
147
|
-
1. 当akfun.config.js的entry只有一个入口配置,且对应的构建入口文件不存在时,AKFun会自动从src/pages中获取构建入口(支持多页面多模板)
|
|
148
|
-
2. 多页面模式下,会自动将src/pages中以.ts、.tsx、.js、.jsx结尾(对应的匹配正则:/\.[tj]sx?$/)的文件作为构建入口文件,同时将同名的html文件作为当前页面模板
|
|
149
|
-
|
|
150
|
-
7. **关于多页面多模板**
|
|
151
|
-
1. 只有dev和build的构建过程中才会使用到页面模板,build2lib构建中不会将打包完成的代码输出到页面模板中
|
|
152
|
-
2. 默认使用./src/index.html作为页面模板
|
|
153
|
-
3. 当项目中./src/index.html不存在时,会使用AKFun的提供的默认页面模板
|
|
154
|
-
4. 多页面模式时,如果pages下存在对应的html页面(与入口文件同名的html文件),会自动将其设置为页面模板
|
|
155
|
-
|
|
156
|
-
## AKFun开放的配置能力
|
|
157
|
-
> AKFun配置文件(akfun.config.js),以下使用AKFunConfig代表akfun.config.js配置对象
|
|
158
|
-
1. 开启/关闭 ESLint代码规范检测: AKFunConfig.settings.enableEslint (也可配置StyleLint的使用)
|
|
85
|
+
### 1) 基础规范与检查
|
|
159
86
|
```bash
|
|
160
87
|
module.exports = {
|
|
161
88
|
settings: {
|
|
@@ -167,37 +94,29 @@ module.exports = {
|
|
|
167
94
|
...
|
|
168
95
|
}
|
|
169
96
|
```
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
> 备注:建议以key/value
|
|
97
|
+
|
|
98
|
+
### 2) 构建入口(优先级:dev/build/build2lib.entry > webpack.entry)
|
|
99
|
+
> 备注:建议以 key/value(object { <key>: string | [string] })配置 entry。详情参考 Webpack 文档:[关于 entry 的配置方法](https://www.webpackjs.com/configuration/entry-context/#entry)
|
|
173
100
|
```bash
|
|
174
101
|
module.exports = {
|
|
175
102
|
...
|
|
176
103
|
webpack: {
|
|
177
|
-
entry: {
|
|
178
|
-
index: './src/index.js',
|
|
179
|
-
}
|
|
104
|
+
entry: { index: './src/index.js' },
|
|
180
105
|
},
|
|
181
106
|
...
|
|
182
|
-
dev: {
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
build: {
|
|
186
|
-
entry: {}
|
|
187
|
-
}
|
|
188
|
-
build2lib: {
|
|
189
|
-
entry: {}
|
|
190
|
-
}
|
|
107
|
+
dev: { entry: {} },
|
|
108
|
+
build: { entry: {} },
|
|
109
|
+
build2lib: { entry: {} },
|
|
191
110
|
build2esm: {
|
|
192
111
|
input: resolve('src/main.js'),
|
|
193
112
|
fileName: 'index',
|
|
194
|
-
}
|
|
113
|
+
},
|
|
195
114
|
...
|
|
196
115
|
}
|
|
197
116
|
```
|
|
198
117
|
|
|
199
|
-
3
|
|
200
|
-
>
|
|
118
|
+
### 3) 解析配置(extensions)
|
|
119
|
+
> 详情参考 Webpack 文档:[关于 resolve.extensions 的配置方法](https://www.webpackjs.com/configuration/resolve/#resolve-extensions)
|
|
201
120
|
```bash
|
|
202
121
|
module.exports = {
|
|
203
122
|
...
|
|
@@ -210,8 +129,8 @@ module.exports = {
|
|
|
210
129
|
}
|
|
211
130
|
```
|
|
212
131
|
|
|
213
|
-
4
|
|
214
|
-
>
|
|
132
|
+
### 4) 别名配置(alias)
|
|
133
|
+
> 详情参考 Webpack 文档:[关于 resolve.alias 的配置方法](https://www.webpackjs.com/configuration/resolve/#resolve-alias)
|
|
215
134
|
```bash
|
|
216
135
|
module.exports = {
|
|
217
136
|
...
|
|
@@ -223,68 +142,46 @@ module.exports = {
|
|
|
223
142
|
...
|
|
224
143
|
}
|
|
225
144
|
```
|
|
226
|
-
5. 页面模板路径配置:关于页面模板请查看 AKFun使用说明 / 关于页面模板
|
|
227
|
-
```bash
|
|
228
|
-
module.exports = {
|
|
229
|
-
...
|
|
230
|
-
webpack: {
|
|
231
|
-
template: '',
|
|
232
|
-
}
|
|
233
|
-
...
|
|
234
|
-
}
|
|
235
|
-
```
|
|
236
145
|
|
|
237
|
-
|
|
238
|
-
> 为项目中每个.scss后缀的样式文件注入公共的SASS内容(变量、mixin、function等)
|
|
146
|
+
### 5) 页面模板与样式资源
|
|
239
147
|
```bash
|
|
240
148
|
module.exports = {
|
|
241
149
|
...
|
|
242
150
|
webpack: {
|
|
243
|
-
|
|
151
|
+
template: '', // 自定义页面模板
|
|
152
|
+
sassResources: [], // 为每个 .scss 注入公共 SASS(变量、mixin、function 等)
|
|
244
153
|
}
|
|
245
154
|
...
|
|
246
155
|
}
|
|
247
156
|
```
|
|
248
157
|
|
|
249
|
-
|
|
250
|
-
>
|
|
158
|
+
### 6) 依赖打包策略(忽略 node_modules)
|
|
159
|
+
> 打包过程中忽略 node_modules 依赖,减少最终体积;可通过 allowList 指定需注入 bundle 的依赖。
|
|
251
160
|
```bash
|
|
252
161
|
module.exports = {
|
|
253
162
|
...
|
|
254
163
|
webpack: {
|
|
255
|
-
ignoreNodeModules: true,
|
|
164
|
+
ignoreNodeModules: true, // 是否忽略node_modules中的依赖文件
|
|
256
165
|
allowList: [], // 用于配置会注入bundle中的依赖包(ignoreNodeModules为true时生效)
|
|
257
166
|
}
|
|
258
167
|
...
|
|
259
168
|
}
|
|
260
169
|
```
|
|
261
170
|
|
|
262
|
-
|
|
263
|
-
> 构建ts项目中,可以选择是否生成ts声明文件
|
|
264
|
-
```bash
|
|
265
|
-
module.exports = {
|
|
266
|
-
...
|
|
267
|
-
webpack: {
|
|
268
|
-
createDeclaration: true,
|
|
269
|
-
}
|
|
270
|
-
...
|
|
271
|
-
}
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
9. 配置项目源码目录(工程有效目录范围): projectDir
|
|
275
|
-
> 构建项目中,设置生效的目录(可同时设置多个目录),用于提高前端工程执行效率。可以不配置,默认为['./src']
|
|
171
|
+
### 7) TypeScript 声明文件与工程目录
|
|
276
172
|
```bash
|
|
277
173
|
module.exports = {
|
|
278
174
|
...
|
|
279
175
|
webpack: {
|
|
280
|
-
|
|
176
|
+
createDeclaration: true, // 是否生成ts声明文件
|
|
177
|
+
projectDir: ['./src'], // 可配置多个目录,用于提升工程执行效率
|
|
281
178
|
}
|
|
282
179
|
...
|
|
283
180
|
}
|
|
284
181
|
```
|
|
285
182
|
|
|
286
|
-
|
|
287
|
-
> [关于params-replace-loader的使用方法](https://www.npmjs.com/package/params-replace-loader)
|
|
183
|
+
### 8) 环境变量替换(params-replace-loader)
|
|
184
|
+
> [关于 params-replace-loader 的使用方法](https://www.npmjs.com/package/params-replace-loader)
|
|
288
185
|
```bash
|
|
289
186
|
module.exports = {
|
|
290
187
|
...
|
|
@@ -302,116 +199,119 @@ module.exports = {
|
|
|
302
199
|
}
|
|
303
200
|
```
|
|
304
201
|
|
|
305
|
-
|
|
306
|
-
> [关于proxyTable的配置方法](https://www.webpackjs.com/configuration/dev-server/#devserver-proxy)
|
|
202
|
+
### 9) 开发服务(代理与基础配置)
|
|
203
|
+
> [关于 proxyTable 的配置方法](https://www.webpackjs.com/configuration/dev-server/#devserver-proxy)
|
|
307
204
|
```bash
|
|
308
205
|
module.exports = {
|
|
309
206
|
...
|
|
310
207
|
dev: {
|
|
311
|
-
|
|
208
|
+
NODE_ENV: 'development', // development 模式,不会启动UglifyJsPlugin服务
|
|
209
|
+
port: 80, // 启动server服务的端口
|
|
210
|
+
autoOpenBrowser: true, // 是否自动打开页面
|
|
211
|
+
assetsPublicPath: '/', // 设置静态资源的引用路径(根域名+路径)
|
|
212
|
+
assetsSubDirectory: '', // 资源引用二级路径
|
|
213
|
+
hostname: 'localhost', // 自动打开的页面主机
|
|
214
|
+
proxyTable: { // 接口代理
|
|
215
|
+
'/apiTest': {
|
|
216
|
+
target: 'http://api-test.com.cn', // 不支持跨域的接口根地址
|
|
217
|
+
ws: true,
|
|
218
|
+
changeOrigin: true
|
|
219
|
+
}
|
|
312
220
|
},
|
|
313
|
-
|
|
221
|
+
cssSourceMap: false,
|
|
222
|
+
},
|
|
314
223
|
...
|
|
315
224
|
}
|
|
316
225
|
```
|
|
317
226
|
|
|
318
|
-
|
|
227
|
+
### 10) 生产构建
|
|
319
228
|
```bash
|
|
320
229
|
module.exports = {
|
|
321
230
|
...
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
ws: true,
|
|
333
|
-
changeOrigin: true
|
|
334
|
-
}
|
|
335
|
-
},
|
|
336
|
-
cssSourceMap: false,
|
|
337
|
-
},
|
|
231
|
+
build: {
|
|
232
|
+
NODE_ENV: 'production', // production 模式,会启动UglifyJsPlugin服务
|
|
233
|
+
assetsRoot: resolve('./dist'), // 打包后的文件绝对路径(物理路径)
|
|
234
|
+
assetsPublicPath: '/', // 设置静态资源的引用路径(根域名+路径)
|
|
235
|
+
assetsSubDirectory: '', // 资源引用二级路径
|
|
236
|
+
productionSourceMap: false, // 是否显示原始源代码
|
|
237
|
+
productionGzip: false, // 是否开启Gzip服务
|
|
238
|
+
productionGzipExtensions: ['js', 'css', 'json'], // Gzip识别的文件后缀
|
|
239
|
+
bundleAnalyzerReport: false, // 开启打包分析功能
|
|
240
|
+
}
|
|
338
241
|
...
|
|
339
242
|
}
|
|
340
243
|
```
|
|
341
244
|
|
|
342
|
-
|
|
245
|
+
### 11) 库构建(UMD)
|
|
343
246
|
```bash
|
|
344
247
|
module.exports = {
|
|
345
248
|
...
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
249
|
+
build2lib: {
|
|
250
|
+
NODE_ENV: 'production', // production 模式,会启动UglifyJsPlugin服务
|
|
251
|
+
libraryName: '', // 构建第三方功能包时最后导出的引用变量名
|
|
252
|
+
assetsRoot: resolve('dist'), // 编译完成的文件存放路径
|
|
253
|
+
assetsPublicPath: '/', // 设置静态资源的引用路径(根域名+路径)
|
|
254
|
+
assetsSubDirectory: '', // 资源引用二级路径
|
|
255
|
+
productionSourceMap: false, // 是否显示原始源代码
|
|
256
|
+
productionGzip: false, // 是否开启Gzip服务
|
|
257
|
+
productionGzipExtensions: ['js', 'css', 'json'], // Gzip识别的文件后缀
|
|
258
|
+
bundleAnalyzerReport: false, // 开启打包分析功能
|
|
259
|
+
},
|
|
356
260
|
...
|
|
357
261
|
}
|
|
358
262
|
```
|
|
359
263
|
|
|
360
|
-
|
|
264
|
+
### 12) 库构建(ESM)
|
|
361
265
|
```bash
|
|
362
266
|
module.exports = {
|
|
363
267
|
...
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
assetsSubDirectory: '', // 资源引用二级路径
|
|
370
|
-
productionSourceMap: false, // 是否显示原始源代码
|
|
371
|
-
productionGzip: false, // 是否开启Gzip服务
|
|
372
|
-
productionGzipExtensions: ['js', 'css', 'json'], // Gzip识别的文件后缀
|
|
373
|
-
bundleAnalyzerReport: false, // 开启打包分析功能
|
|
374
|
-
},
|
|
268
|
+
build2esm: {
|
|
269
|
+
input: resolve('src/main.js'), // 入口文件
|
|
270
|
+
fileName: 'index', // 输出的文件名称
|
|
271
|
+
svgDir: 'src/icons/**', // 用于设置当前项目的icon所在目录,避免被 @rollup/plugin-image 编译成base64格式
|
|
272
|
+
},
|
|
375
273
|
...
|
|
376
274
|
}
|
|
377
275
|
```
|
|
378
276
|
|
|
379
|
-
|
|
277
|
+
### 13) 自定义 Loader / Plugin / Babel Plugins
|
|
380
278
|
```bash
|
|
381
279
|
module.exports = {
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
280
|
+
webpack: {
|
|
281
|
+
moduleRules: [], // 用于添加自定义 loaders
|
|
282
|
+
plugins: [], // 用于添加自定义 plugins
|
|
283
|
+
babelPlugins: [ // 用于添加自定义 Babel plugins
|
|
284
|
+
[
|
|
285
|
+
'component',
|
|
286
|
+
{ libraryName: 'element-ui', styleLibraryName: 'theme-chalk' },
|
|
287
|
+
],
|
|
288
|
+
],
|
|
289
|
+
},
|
|
389
290
|
}
|
|
390
291
|
```
|
|
292
|
+
备注: 以上自定义 babelPlugins 用于实现 [element-ui 组件按需引入](https://element.eleme.cn/#/zh-CN/component/quickstart#an-xu-yin-ru)。
|
|
391
293
|
|
|
392
|
-
|
|
393
|
-
> 比如用于启用/禁用 @import 解析。
|
|
294
|
+
也支持以函数形式动态调整内置 Babel Plugins:
|
|
394
295
|
```bash
|
|
395
296
|
module.exports = {
|
|
396
|
-
...
|
|
397
297
|
webpack: {
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
...
|
|
298
|
+
babelPlugins: (curBabelPlugins) => {
|
|
299
|
+
curBabelPlugins.push(/* your plugin */)
|
|
300
|
+
return curBabelPlugins
|
|
301
|
+
},
|
|
302
|
+
},
|
|
404
303
|
}
|
|
405
304
|
```
|
|
406
305
|
|
|
407
|
-
|
|
408
|
-
> 比如用于添加 PostCSS 选项与插件。
|
|
306
|
+
### 14) 自定义 css-loader / 自定义 postcss-loader
|
|
409
307
|
```bash
|
|
410
308
|
module.exports = {
|
|
411
309
|
...
|
|
412
310
|
webpack: {
|
|
413
|
-
|
|
414
|
-
|
|
311
|
+
cssLoaderOption: {
|
|
312
|
+
import: false, // 启用/禁用 @import 解析
|
|
313
|
+
},
|
|
314
|
+
postCssLoaderOption: { // 自定义postcss-loader的配置
|
|
415
315
|
postcssOptions: {
|
|
416
316
|
plugins: [
|
|
417
317
|
require('postcss-pxtorem')({ // 用于将px自动转化为rem
|
|
@@ -426,8 +326,8 @@ module.exports = {
|
|
|
426
326
|
}
|
|
427
327
|
```
|
|
428
328
|
|
|
429
|
-
|
|
430
|
-
> 使用 https://localhost/index.html 访问当前项目。
|
|
329
|
+
### 15) 本地 HTTPS
|
|
330
|
+
> 使用 `https://localhost/index.html` 访问当前项目。
|
|
431
331
|
```bash
|
|
432
332
|
module.exports = {
|
|
433
333
|
...
|
package/package.json
CHANGED
|
@@ -73,7 +73,7 @@ module.exports = (akfunConfig) => {
|
|
|
73
73
|
);
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
if (!
|
|
76
|
+
if (!curEnvConfig.closeHtmlWebpackPlugin) {
|
|
77
77
|
// 使用用户自定义的多入口配置,生产对应的多页面多模板(优先使用用户的自定义页面模板)
|
|
78
78
|
const htmlWebpackPluginList = entrys2htmlWebpackPlugin(webpackDevConfig.entry, curHtmlTemplate);
|
|
79
79
|
htmlWebpackPluginList.forEach((htmlWebpackPlugin) => {
|
|
@@ -58,6 +58,10 @@ module.exports = (akfunConfig) => {
|
|
|
58
58
|
* deterministic 在不同的编译中不变的短数字 id。有益于长期缓存。在生产模式中会默认开启。
|
|
59
59
|
*/
|
|
60
60
|
chunkIds: 'named',
|
|
61
|
+
/**
|
|
62
|
+
* 当 optimization.splitChunks 未配置或设置为 false 时,
|
|
63
|
+
* webpack 会将所有模块打包到一个 JS 文件中(除了异步加载的模块)。
|
|
64
|
+
*/
|
|
61
65
|
emitOnErrors: true,
|
|
62
66
|
// minimize: true,
|
|
63
67
|
minimizer: [
|
|
@@ -96,9 +96,17 @@ module.exports = (akfunConfig) => {
|
|
|
96
96
|
plugins: []
|
|
97
97
|
});
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
// 优先使用当前环境配置中的output
|
|
100
|
+
if (curEnvConfig.output) {
|
|
101
|
+
webpackProdConfig.output = deepMergeConfig(webpackProdConfig.output, curEnvConfig.output);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (!curEnvConfig.closeHtmlWebpackPlugin) {
|
|
100
105
|
// 使用用户自定义的多入口配置,生产对应的多页面多模板
|
|
101
|
-
const htmlWebpackPluginList = entrys2htmlWebpackPlugin(
|
|
106
|
+
const htmlWebpackPluginList = entrys2htmlWebpackPlugin(
|
|
107
|
+
webpackProdConfig.entry,
|
|
108
|
+
curHtmlTemplate
|
|
109
|
+
);
|
|
102
110
|
|
|
103
111
|
htmlWebpackPluginList.forEach((htmlWebpackPlugin) => {
|
|
104
112
|
webpackProdConfig.plugins.push(htmlWebpackPlugin);
|
|
@@ -106,7 +114,7 @@ module.exports = (akfunConfig) => {
|
|
|
106
114
|
}
|
|
107
115
|
|
|
108
116
|
// 判断是否有public目录,如果有需要转移到dist目录下
|
|
109
|
-
if (fs.existsSync(resolve('public'))) {
|
|
117
|
+
if (!curEnvConfig.ignorePublicAssets && fs.existsSync(resolve('public'))) {
|
|
110
118
|
// copy custom public assets
|
|
111
119
|
webpackProdConfig.plugins.push(
|
|
112
120
|
new CopyWebpackPlugin({
|