├── .babelrc ├── .eslintrc.js ├── .gitignore ├── README.md ├── package.json ├── src ├── classes │ ├── FileTree.js │ ├── Loader.js │ ├── ModuleHelper.js │ ├── OutPutPath.js │ └── Wxml.js ├── config │ └── constant.js ├── helpers │ ├── analyze-graph.js │ ├── calc-code-dep.js │ ├── calc-content-hash.js │ ├── create-resolver.js │ ├── get-files.js │ ├── html-mini-loader.js │ ├── merge-entry.js │ ├── module.js │ ├── normal-entrys.js │ ├── parse-entry.js │ ├── resolve-asset-content.js │ ├── resolve-component-path.js │ ├── resolve-dist-path.js │ ├── resolve-target-path.js │ ├── update-code.js │ └── wxml-parser.js ├── index.js ├── lib │ └── require.js ├── platform │ └── wx │ │ ├── get-empty-file-source.js │ │ └── wxml.js ├── plugin │ ├── FileEntryPlugin.js │ ├── MiniProgramPlugin.js │ └── MiniTemplatePlugin.js └── utils.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "loose": true, 6 | "targets": { 7 | "node": "6.10" 8 | } 9 | }] 10 | ] 11 | } -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | "extends": "standard", 3 | "globals": { 4 | "App": true, 5 | "Page": true 6 | }, 7 | "rules": { 8 | "no-return-await": [0] 9 | } 10 | }; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > 由于很久没有写小程序了,所以这个工具可能不维护了 2 | 3 | 4 | ## mini-program-webpack-loader 5 | 6 | 基于 webpack 4.0 的小程序打包工具。 7 | 8 | **项目依赖 async/await, Set/Map, spread 等 es6+ 语法** 9 | 10 | ## 安装 11 | 12 | ``` bash 13 | $ npm i mini-program-webpack-loader --dev 14 | ``` 15 | 16 | ## 介绍 17 | 18 | 该工具主要解决小程序难以集成更多的成熟工具的问题。其次支持多个小程序项目共建。 19 | 20 | 该工具由两部分组成,loader 和 plugin。 21 | 22 | ### 能力 23 | - 支持在小程序项目中使用 webpack 的所有能力 24 | - 支持在 wxml, wxss, wxs, json 文件中使用模块别名 25 | - 支持全局注册自定义组件 26 | - 支持多小程序项目合并 27 | - 支持小程序项目分析 28 | 29 | ### 插件 30 | 31 | #### 使用 32 | 33 | ``` javascript 34 | const MiniPlugin = require('mini-program-webpack-loader').plugin; 35 | 36 | module.exports = { 37 | ..., // webpack 其他设置 38 | plugins: [ 39 | new MiniPlugin({ 40 | ... // 参数 41 | }) 42 | ], 43 | ... // webpack 其他设置 44 | } 45 | ``` 46 | 47 | #### 参数 48 |
extfile | 52 |`true` | 53 |打包主包下的 ext.json(默认值) | 54 |
`false` | 57 |58 | 不打包 ext.json 59 | | 60 ||
`String` | 63 |64 | extfile 文件路径 65 | | 66 ||
69 | `ignoreTabbar`
70 | |
71 |
72 | `Boolean`
73 | |
74 | 是否把 tabbar 中的图片添加到构建,考虑到很多场景除了 tabbar 资源,可能还存在其他资源不能被插件索引到,可以通过 copy 插件复制资源,所以插件默认不会构建 tabbar 依赖的图片内容 | 75 |
78 | `silently`
79 | |
80 |
81 | `Boolean`
82 | |
83 | 是否输出构建信息,默认 `false`,输出构建信息 | 84 |
87 | `optimizeMainPackage`
88 | |
89 |
90 | `Boolean`
91 | |
92 | 是否优化主包体积。在一些场景下,组件只在多个分包使用,于是组件只能放到主包内,插件提供配置,自动拷贝这些组件到分包内,以减小主包体积,默认值为 `true` | 93 |
96 | setSubPackageCacheGroup(miniLoader, appJson) 97 | |
98 | `Function` | 99 |
100 | 根据最后输出的 `app.json` 设置 `cacheGroup` 101 | |
102 |
105 | `useFinalCallback`
106 | |
107 |
108 | `Boolean`
109 | |
110 | 是否使用自定义的构建完成回调,默认使用插件内置的回调来输出构建信息。 | 111 |
114 | `compilationFinish(err, stat, appJson)`
115 | |
116 |
117 | `Function`
118 | |
119 | 打包完成后回调 | 120 |
123 | resources 124 | |
125 | `Array` | 126 |
127 | 提供资源的目录。 128 |除了所有入口所在的目录,src目录,node_modules,其他目录需要在这里添加否则可能导致路径计算错误。 129 |
130 | 其中 137 | `path/to/src`为项目目录, 138 | `path/to/shared` 139 | 为多个项目公用的目录。 140 |
141 | |
147 |
entry | 150 |`Object` | 151 |每个 key 必须为 webpack 对应的 entry 配置的绝对路径。值为一个对象。 |
154 | `entry.accept`
155 | |
156 |
157 | `Object`
158 | |
159 |
160 | accept 会从对应的入口配置中读取对应的字段,进行保留。即如果 entry 中设置了入口文件配置,则不在 accept 中的字段,都会被直接删除。 161 | |
162 |
165 | `entry.accept[property]`
166 | |
167 |
168 | `any`
169 | |
170 |
171 | 对于非特殊说明的字段,因为对应入口有了配置就会删除不在 accept 对应中的字段,如果希望保留其中部分字段可以通过设置对应 key 的值为 `true` 172 | |
173 |
176 | `entry.accept.pages`
177 | |
178 |
179 | `Array` | `true`
180 | |
181 |
182 | 如果值是数组,则会从当前入口文件的 `pages` 字段获取对应的页面,其他页面会被丢弃。`true` 值会保留所有的页面,配合 `ignore.pages` 可以丢弃其中部分不用的页面 183 | |
184 |
187 | `entry.accept.usingComponents`
188 | |
189 |
190 | `Array` | `true`
191 | |
192 |
193 | 如果值是数组,元素的值应该是入口文件的 `usingConponents` 字段对应的key,表示要保留的组件,不在数组中的其他组件会被丢弃。`true` 值会保留所有的组件,配合 `ignore.usingComponents` 可以丢弃其中部分不用的组件 194 | |
195 |
198 | `entry.ignore`
199 | |
200 | `Object` | 201 |
202 | ignore 配置用于删除通过 accept 保留的配置。目前仅支持 pages。 203 | |
204 |
207 | `entry.ignore.pages`
208 | |
209 |
210 | `Array`
211 | |
212 | 可以删除 pages 和 subpackages 里面的页面 | 213 |
216 | `entry.ignore.usingComponents`
217 | |
218 |
219 | `Array`
220 | |
221 | 不加载对应入口文件 `usingConponents` 字段对应组件 | 222 |