UNPKG

2.28 kBMarkdownView Raw
1# fis3-packager-smart
2fis3 require打包插件。
3
4### 安装
5```
6npm i -g fis3-packager-smart
7```
8
9### 打包原理
10分析页面a.html的同步(requires)和异步依赖(asyncs),每个依赖的js文件,会再去分析自身的依赖关系,然后打成一个包。
11
12例如页面a.html中有以下脚本:
13```
14require.async(['zepto', 'common', 'a'], function($, tools, main){
15 main.init();
16});
17```
18最终会分析zepto的依赖,打成一个包,common和a类似。
19
20调试模式下,可以设置`autoPack: false`,表示不打包。这样依赖的文件会全部以script的方式插入到html中, css的处理类似。
21
22配置中有lib项配置,表示该库会单独打成一个包。
23
24### html中的引用
25基于上面的原理,html中引入主JS脚本时,推荐的方式是:
26+ 主JS也是一个模块,而不是自执行的脚本,对外导出init接口
27+ html中使用内联的方式require主JS脚本,然后调用init方法
28```
29// main.js
30module.exports = {init: function(){}};
31
32// index.html
33<script>
34require(['main'], function(main) {
35 main.init();
36});
37</script>
38```
39
40或者主JS自执行,但是在html中通过require引入
41```
42// main.js
43init();
44// index.html
45<script>
46require('main');
47</script>
48// index.html中不要使用下面的方式引入脚本
49<script src='main.js'></script>
50```
51
52### 配置
53```
54fis.match('::package', {
55 packager: fis.plugin('smart', {
56 // 脚本占位符
57 scriptPlaceHolder: '<!--SCRIPT_PLACEHOLDER-->',
58
59 // 样式占位符
60 stylePlaceHolder: '<!--STYLE_PLACEHOLDER-->',
61
62 // 资源占位符
63 resourcePlaceHolder: '<!--RESOURCEMAP_PLACEHOLDER-->',
64
65 output: 'pkg/${id}_min.js',
66 // 自动打包资源
67 autoPack: false,
68
69 ignore: [], // 不打包的模块
70 // css 内联到页面
71 cssInline: false,
72 // 所有css打包到一个文件中
73 cssAllInOne: false
74 })
75});
76```
77
78上面的配置都是默认的,使用者可以完全不用管,只需要配置autoPack属性
79```
80fis.match('::package', {
81 packager: fis.plugin('smart', {
82 autoPack: true // false表示不打包,默认是false
83 });
84});
85```