1 | # fis3-packager-smart
|
2 | fis3 require打包插件。
|
3 |
|
4 | ### 安装
|
5 | ```
|
6 | npm i -g fis3-packager-smart
|
7 | ```
|
8 |
|
9 | ### 打包原理
|
10 | 分析页面a.html的同步(requires)和异步依赖(asyncs),每个依赖的js文件,会再去分析自身的依赖关系,然后打成一个包。
|
11 |
|
12 | 例如页面a.html中有以下脚本:
|
13 | ```
|
14 | require.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
|
30 | module.exports = {init: function(){}};
|
31 |
|
32 | // index.html
|
33 | <script>
|
34 | require(['main'], function(main) {
|
35 | main.init();
|
36 | });
|
37 | </script>
|
38 | ```
|
39 |
|
40 | 或者主JS自执行,但是在html中通过require引入
|
41 | ```
|
42 | // main.js
|
43 | init();
|
44 | // index.html
|
45 | <script>
|
46 | require('main');
|
47 | </script>
|
48 | // index.html中不要使用下面的方式引入脚本
|
49 | <script src='main.js'></script>
|
50 | ```
|
51 |
|
52 | ### 配置
|
53 | ```
|
54 | fis.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 | ```
|
80 | fis.match('::package', {
|
81 | packager: fis.plugin('smart', {
|
82 | autoPack: true // false表示不打包,默认是false
|
83 | });
|
84 | });
|
85 | ```
|