xhs-mp-compiler-cli 1.0.2 → 1.1.0

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.
Files changed (150) hide show
  1. package/dist/bin/xhs-mp-cli-build.js +3 -3
  2. package/dist/bin/xhs-mp-cli-dev.js +9 -31
  3. package/dist/compiler.d.ts +76 -0
  4. package/dist/compiler.js +361 -0
  5. package/dist/compilerCP.js +175 -0
  6. package/dist/config/constant.config.d.ts +7 -0
  7. package/dist/config/constant.config.js +10 -0
  8. package/dist/dev-server/index.d.ts +2 -2
  9. package/dist/dev-server/index.js +7 -5
  10. package/dist/index.d.ts +1 -11
  11. package/dist/index.js +3 -112
  12. package/dist/packs/index.d.ts +14 -0
  13. package/dist/packs/index.js +31 -0
  14. package/dist/packs/mp-pack/index.d.ts +3 -0
  15. package/dist/packs/mp-pack/index.js +32 -0
  16. package/dist/packs/webpack/index.d.ts +3 -0
  17. package/dist/packs/webpack/index.js +92 -0
  18. package/dist/packs/webpack/webpack.d.ts +21 -0
  19. package/dist/packs/webpack/webpack.js +79 -0
  20. package/dist/{webpack-config/presets → presets}/babel.d.ts +3 -3
  21. package/dist/{webpack-config/presets → presets}/babel.js +13 -11
  22. package/dist/presets/common.d.ts +4 -0
  23. package/dist/presets/common.js +46 -0
  24. package/dist/presets/configs/minigame/assets/assetsEntryPlugin.d.ts +10 -0
  25. package/dist/presets/configs/minigame/assets/assetsEntryPlugin.js +46 -0
  26. package/dist/presets/configs/minigame/assets/index.d.ts +3 -0
  27. package/dist/presets/configs/minigame/assets/index.js +65 -0
  28. package/dist/presets/configs/minigame/service/index.d.ts +3 -0
  29. package/dist/presets/configs/minigame/service/index.js +34 -0
  30. package/dist/{webpack-config/presets/service/XhsResolveLimitPlugin.d.ts → presets/configs/minigame/service/resolveLimitPlugin.d.ts} +3 -3
  31. package/dist/presets/configs/minigame/service/resolveLimitPlugin.js +35 -0
  32. package/dist/presets/configs/minigame/service/serviceChunkPlugin.d.ts +9 -0
  33. package/dist/presets/configs/minigame/service/serviceChunkPlugin.js +69 -0
  34. package/dist/{webpack-config/presets/service/ServiceEntryPlugin.d.ts → presets/configs/minigame/service/serviceEntryPlugin.d.ts} +3 -1
  35. package/dist/presets/configs/minigame/service/serviceEntryPlugin.js +32 -0
  36. package/dist/presets/configs/miniprogram/assets/assetsEntryPlugin.d.ts +12 -0
  37. package/dist/presets/configs/miniprogram/assets/assetsEntryPlugin.js +132 -0
  38. package/dist/presets/configs/miniprogram/assets/index.d.ts +4 -0
  39. package/dist/presets/configs/miniprogram/assets/index.js +47 -0
  40. package/dist/presets/configs/miniprogram/render/component.d.ts +3 -0
  41. package/dist/presets/configs/miniprogram/render/component.js +47 -0
  42. package/dist/presets/configs/miniprogram/render/index.d.ts +5 -0
  43. package/dist/presets/configs/miniprogram/render/index.js +70 -0
  44. package/dist/presets/configs/miniprogram/render/render.d.ts +3 -0
  45. package/dist/presets/configs/miniprogram/render/render.js +49 -0
  46. package/dist/presets/configs/miniprogram/render/renderChunkPlugin.d.ts +8 -0
  47. package/dist/{webpack-config/presets/render/RenderChunkPlugin.js → presets/configs/miniprogram/render/renderChunkPlugin.js} +13 -8
  48. package/dist/presets/configs/miniprogram/render/sjsEntryPlugin.d.ts +15 -0
  49. package/dist/{webpack-config/presets/render/SjsEntryPlugin.js → presets/configs/miniprogram/render/sjsEntryPlugin.js} +24 -21
  50. package/dist/presets/configs/miniprogram/service/index.d.ts +5 -0
  51. package/dist/presets/configs/miniprogram/service/index.js +72 -0
  52. package/dist/presets/configs/miniprogram/service/resolveLimitPlugin.d.ts +8 -0
  53. package/dist/{webpack-config/presets/service/XhsResolveLimitPlugin.js → presets/configs/miniprogram/service/resolveLimitPlugin.js} +11 -10
  54. package/dist/presets/configs/miniprogram/service/serviceChunkPlugin.d.ts +9 -0
  55. package/dist/presets/configs/miniprogram/service/serviceChunkPlugin.js +65 -0
  56. package/dist/presets/index.d.ts +2 -0
  57. package/dist/presets/index.js +95 -0
  58. package/dist/presets/loaders/mg-entry-loader.js +27 -0
  59. package/dist/{webpack-config → presets}/loaders/mini-style-loader.js +13 -10
  60. package/dist/presets/loaders/mp-entry-loader.js +196 -0
  61. package/dist/{webpack-config → presets}/loaders/sjs-loader/index.js +0 -4
  62. package/dist/{webpack-config → presets}/loaders/wxss-loader.js +7 -6
  63. package/dist/presets/plugins/InjectorPlugin.d.ts +7 -0
  64. package/dist/presets/plugins/InjectorPlugin.js +14 -0
  65. package/dist/presets/prod.d.ts +4 -0
  66. package/dist/presets/prod.js +80 -0
  67. package/dist/types/index.d.ts +18 -6
  68. package/dist/utils/common.d.ts +2 -1
  69. package/dist/utils/common.js +7 -6
  70. package/dist/utils/const.d.ts +27 -0
  71. package/dist/utils/const.js +47 -0
  72. package/dist/{webpack-config/lib → utils}/css.js +6 -6
  73. package/dist/utils/getSuffixName.d.ts +3 -0
  74. package/dist/utils/getSuffixName.js +18 -0
  75. package/dist/{webpack-config/loaders/utils.d.ts → utils/loader-utils.d.ts} +2 -0
  76. package/dist/{webpack-config/loaders/utils.js → utils/loader-utils.js} +19 -1
  77. package/dist/utils/projectConfig.d.ts +1 -1
  78. package/dist/utils/projectConfig.js +2 -2
  79. package/dist/{webpack-config/lib → utils}/utils.js +2 -2
  80. package/package.json +10 -9
  81. package/dist/build/index.d.ts +0 -3
  82. package/dist/build/index.js +0 -22
  83. package/dist/globalData/SjsModule.d.ts +0 -32
  84. package/dist/globalData/SjsModule.js +0 -34
  85. package/dist/utils/combineExtJson.d.ts +0 -3
  86. package/dist/utils/combineExtJson.js +0 -74
  87. package/dist/utils/getCssSuffixName.d.ts +0 -1
  88. package/dist/utils/getCssSuffixName.js +0 -9
  89. package/dist/utils/getMlSuffixName.d.ts +0 -1
  90. package/dist/utils/getMlSuffixName.js +0 -6
  91. package/dist/utils/getPrefixName.d.ts +0 -1
  92. package/dist/utils/getPrefixName.js +0 -6
  93. package/dist/utils/transformAppJson.d.ts +0 -16
  94. package/dist/utils/transformAppJson.js +0 -199
  95. package/dist/utils/validateAppJson.d.ts +0 -4
  96. package/dist/utils/validateAppJson.js +0 -111
  97. package/dist/webpack-config/index.d.ts +0 -4
  98. package/dist/webpack-config/index.js +0 -41
  99. package/dist/webpack-config/lib/const.d.ts +0 -13
  100. package/dist/webpack-config/lib/const.js +0 -15
  101. package/dist/webpack-config/loaders/component-entry-loader.js +0 -31
  102. package/dist/webpack-config/loaders/component-entry-requirements-loader.js +0 -24
  103. package/dist/webpack-config/loaders/render-entry-loader.js +0 -50
  104. package/dist/webpack-config/loaders/service-entry-loader.d.ts +0 -1
  105. package/dist/webpack-config/loaders/service-entry-loader.js +0 -51
  106. package/dist/webpack-config/plugins/VueLoaderPlugin.d.ts +0 -19
  107. package/dist/webpack-config/plugins/VueLoaderPlugin.js +0 -205
  108. package/dist/webpack-config/plugins/XhsMpErrorTransformPlugin.d.ts +0 -8
  109. package/dist/webpack-config/plugins/XhsMpErrorTransformPlugin.js +0 -40
  110. package/dist/webpack-config/plugins/XhsMpJsonPlugin.d.ts +0 -36
  111. package/dist/webpack-config/plugins/XhsMpJsonPlugin.js +0 -71
  112. package/dist/webpack-config/presets/common.d.ts +0 -4
  113. package/dist/webpack-config/presets/common.js +0 -40
  114. package/dist/webpack-config/presets/mp/MpEntryPlugin.d.ts +0 -23
  115. package/dist/webpack-config/presets/mp/MpEntryPlugin.js +0 -87
  116. package/dist/webpack-config/presets/mp/index.d.ts +0 -4
  117. package/dist/webpack-config/presets/mp/index.js +0 -48
  118. package/dist/webpack-config/presets/prod.d.ts +0 -4
  119. package/dist/webpack-config/presets/prod.js +0 -83
  120. package/dist/webpack-config/presets/render/ComponentEntryPlugin.d.ts +0 -18
  121. package/dist/webpack-config/presets/render/ComponentEntryPlugin.js +0 -77
  122. package/dist/webpack-config/presets/render/RenderChunkPlugin.d.ts +0 -5
  123. package/dist/webpack-config/presets/render/RenderEntryPlugin.d.ts +0 -14
  124. package/dist/webpack-config/presets/render/RenderEntryPlugin.js +0 -42
  125. package/dist/webpack-config/presets/render/SjsEntryPlugin.d.ts +0 -31
  126. package/dist/webpack-config/presets/render/index.d.ts +0 -4
  127. package/dist/webpack-config/presets/render/index.js +0 -62
  128. package/dist/webpack-config/presets/service/ServiceEntryPlugin.js +0 -36
  129. package/dist/webpack-config/presets/service/XhsMpServiceChunkPlugin.d.ts +0 -6
  130. package/dist/webpack-config/presets/service/XhsMpServiceChunkPlugin.js +0 -46
  131. package/dist/webpack-config/presets/service/XhsV2AssetsPlugin.d.ts +0 -5
  132. package/dist/webpack-config/presets/service/XhsV2AssetsPlugin.js +0 -27
  133. package/dist/webpack-config/presets/service/index.d.ts +0 -4
  134. package/dist/webpack-config/presets/service/index.js +0 -39
  135. /package/dist/{webpack-config/loaders/component-entry-loader.d.ts → compilerCP.d.ts} +0 -0
  136. /package/dist/{webpack-config/loaders/component-entry-requirements-loader.d.ts → presets/loaders/mg-entry-loader.d.ts} +0 -0
  137. /package/dist/{webpack-config → presets}/loaders/mini-style-loader.d.ts +0 -0
  138. /package/dist/{webpack-config/loaders/render-entry-loader.d.ts → presets/loaders/mp-entry-loader.d.ts} +0 -0
  139. /package/dist/{webpack-config → presets}/loaders/sjs-loader/index.d.ts +0 -0
  140. /package/dist/{webpack-config → presets}/loaders/sjs-loader/scope.d.ts +0 -0
  141. /package/dist/{webpack-config → presets}/loaders/sjs-loader/scope.js +0 -0
  142. /package/dist/{webpack-config → presets}/loaders/sjs-loader/tranform.d.ts +0 -0
  143. /package/dist/{webpack-config → presets}/loaders/sjs-loader/tranform.js +0 -0
  144. /package/dist/{webpack-config → presets}/loaders/wxss-loader.d.ts +0 -0
  145. /package/dist/{webpack-config/lib → utils}/css.d.ts +0 -0
  146. /package/dist/{webpack-config/lib → utils}/postcssRpx2Vw.d.ts +0 -0
  147. /package/dist/{webpack-config/lib → utils}/postcssRpx2Vw.js +0 -0
  148. /package/dist/{webpack-config/lib → utils}/tagTransformMap.d.ts +0 -0
  149. /package/dist/{webpack-config/lib → utils}/tagTransformMap.js +0 -0
  150. /package/dist/{webpack-config/lib → utils}/utils.d.ts +0 -0
@@ -1,199 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.PATH_REG = void 0;
7
- const path_1 = __importDefault(require("path"));
8
- const json_to_ast_1 = __importDefault(require("json-to-ast"));
9
- const clone_1 = __importDefault(require("clone"));
10
- const webpack_1 = require("webpack");
11
- const fs_extra_1 = __importDefault(require("fs-extra"));
12
- const getMlSuffixName_1 = __importDefault(require("./getMlSuffixName"));
13
- const validateAppJson_1 = __importDefault(require("./validateAppJson"));
14
- const combineExtJson_1 = __importDefault(require("./combineExtJson"));
15
- const common_1 = require("./common");
16
- let componentIndex = 1;
17
- const readJson = (jsonPath, compilation) => {
18
- try {
19
- const json = fs_extra_1.default.readFileSync(`${jsonPath}`, 'utf-8');
20
- // 若 json 语法错误,jsonParser 能够在抛出的 error 内包含错误位置
21
- (0, json_to_ast_1.default)(json, { loc: true, source: jsonPath });
22
- return JSON.parse(json);
23
- }
24
- catch (error) {
25
- const err = new webpack_1.WebpackError(`[ ${jsonPath} 内容错误 ]: ${error.message}`);
26
- err.file = error.source;
27
- err.stack = undefined;
28
- compilation === null || compilation === void 0 ? void 0 : compilation.errors.push(err);
29
- return { pages: [] };
30
- }
31
- };
32
- // 把所有组件路径修改为相对小程序根目录的路径
33
- const formatComponentsPath = (mpDir, miniprogramDir, relativePath, compPath) => {
34
- if (compPath.startsWith('/')) {
35
- return (0, common_1.unixJoin)(miniprogramDir, compPath).replace(`${miniprogramDir}/`, '');
36
- }
37
- if (compPath.startsWith('.')) {
38
- return (0, common_1.unixJoin)(miniprogramDir, path_1.default.dirname(relativePath), compPath).replace(`${miniprogramDir}/`, '');
39
- }
40
- // 与 / 类似,从小程序的根目录查找,只是没有写 /
41
- if (fs_extra_1.default.existsSync(`${(0, common_1.unixJoin)(miniprogramDir, compPath)}.js`)) {
42
- return (0, common_1.unixJoin)(miniprogramDir, compPath).replace(`${miniprogramDir}/`, '');
43
- }
44
- if (compPath.startsWith('plugin://')) {
45
- // eslint-disable-next-line
46
- console.log('小红书小程序暂不支持插件:', compPath);
47
- return '';
48
- }
49
- /**
50
- * npm 组件处理方式
51
- *
52
- * 1. 确定 npm 包名 npmPkgName:从 package.json 中找到包名 npmPkgName
53
- * 2. 确定组件在包内的路径 npmPkgPath:通过 npmPkgName 查到包的 package.json 的 miniprogram、main 字段获得 npmPkgPath
54
- * 3. 最终路径为:mpDir + node_modules + npmPkgPath + npmPkgName + (npmPkgName - compPath)
55
- *
56
- * npmPkgPath 如果是 main 字段取得的,需要去掉结尾的 .js
57
- * 从微信的表现来看,如果上述方式找不到组件,会在尾部增加 /index 查找
58
- */
59
- const mpPkgJson = readJson(`${mpDir}/package.json`);
60
- const pkgDependencies = Object.keys(mpPkgJson.dependencies || []);
61
- const npmPkgName = pkgDependencies.find(depName => compPath.includes(depName)) || '';
62
- const compName = compPath.replace(npmPkgName, '');
63
- const pkgJson = readJson(`${mpDir}/node_modules/${npmPkgName}/package.json`);
64
- let npmPkgPath = pkgJson.miniprogram || pkgJson.main;
65
- try {
66
- npmPkgPath = npmPkgPath.endsWith('.js') ? npmPkgPath.replace(/.js$/, '') : npmPkgPath;
67
- const res = path_1.default
68
- .join(mpDir, 'node_modules', npmPkgName, npmPkgPath, compName)
69
- .replace(`${mpDir}/`, '');
70
- return fs_extra_1.default.existsSync(`${mpDir}/${res}.${(0, getMlSuffixName_1.default)()}`) ? res : `${res}/index`;
71
- }
72
- catch (err) {
73
- throw new Error(`组件路径不正确:${compPath}`);
74
- }
75
- };
76
- exports.PATH_REG = /\.|\/|\.\/|\.\.\//g;
77
- // 收集组件到 appJSON.componentsMap 内
78
- const collectComponents = (appJSON, mpDir, miniprogramDir, compPath) => {
79
- // 处理循环依赖的组件
80
- if (Object.keys(appJSON.componentsMap).includes(compPath)) {
81
- return;
82
- }
83
- if (fs_extra_1.default.existsSync(`${miniprogramDir}/${compPath}.json`)) {
84
- const json = readJson(`${miniprogramDir}/${compPath}.json`);
85
- appJSON.componentsMap[compPath] = json;
86
- appJSON.componentsMap[compPath].index = componentIndex++;
87
- if (json.componentPlaceholder) {
88
- const placeholderMap = json.componentPlaceholder;
89
- for (const [compName, cPath] of Object.entries(placeholderMap)) {
90
- let compRootPath;
91
- if (exports.PATH_REG.test(cPath)) {
92
- compRootPath = formatComponentsPath(mpDir, miniprogramDir, compPath, cPath);
93
- }
94
- else {
95
- compRootPath = cPath;
96
- }
97
- placeholderMap[compName] = compRootPath;
98
- if (exports.PATH_REG.test(cPath)) {
99
- collectComponents(appJSON, mpDir, miniprogramDir, compRootPath);
100
- }
101
- }
102
- appJSON.componentsMap[compPath].componentPlaceholder = placeholderMap;
103
- }
104
- if (json.usingComponents) {
105
- for (const [compName, cPath] of Object.entries(json.usingComponents)) {
106
- const compRootPath = formatComponentsPath(mpDir, miniprogramDir, compPath, cPath);
107
- json.usingComponents[compName] = compRootPath;
108
- collectComponents(appJSON, mpDir, miniprogramDir, compRootPath);
109
- }
110
- }
111
- }
112
- };
113
- const formatPages = (pages, mpDir, miniprogramDir, extJSON, appJSON) => pages.map((entry) => {
114
- var _a, _b;
115
- let pageItem = { path: entry };
116
- const pageJSONPath = (0, common_1.unixResolve)(miniprogramDir, `${pageItem.path}.json`);
117
- if (fs_extra_1.default.existsSync(pageJSONPath)) {
118
- let pageJSON = readJson(pageJSONPath);
119
- if ((_a = extJSON.extPages) === null || _a === void 0 ? void 0 : _a[`${pageItem.path}`]) {
120
- pageJSON = Object.assign(Object.assign({}, pageJSON), (_b = extJSON.extPages) === null || _b === void 0 ? void 0 : _b[`${pageItem.path}`]);
121
- }
122
- pageItem = Object.assign(Object.assign({}, pageItem), pageJSON);
123
- // 收集 placeholder 组件
124
- if (pageItem.componentPlaceholder) {
125
- for (const [compName, compPath] of Object.entries(pageItem.componentPlaceholder)) {
126
- if (exports.PATH_REG.test(compPath)) {
127
- const compRootPath = formatComponentsPath(mpDir, miniprogramDir, pageItem.path, compPath);
128
- pageItem.componentPlaceholder[compName] = compRootPath;
129
- collectComponents(appJSON, mpDir, miniprogramDir, compRootPath);
130
- }
131
- }
132
- }
133
- // 收集页面组件
134
- if (pageItem.usingComponents) {
135
- for (const [compName, compPath] of Object.entries(pageItem.usingComponents)) {
136
- const compRootPath = formatComponentsPath(mpDir, miniprogramDir, pageItem.path, compPath);
137
- pageItem.usingComponents[compName] = compRootPath;
138
- collectComponents(appJSON, mpDir, miniprogramDir, compRootPath);
139
- }
140
- }
141
- }
142
- return pageItem;
143
- });
144
- const subPackages2Pages = subPackages => subPackages.reduce((acc, cur) => {
145
- const pageGroup = cur.pages;
146
- return [...acc, ...pageGroup];
147
- }, []);
148
- /**
149
- * wx: https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html
150
- * bilibili: http://miniapp.bilibili.com/small-app-doc/framework/global-config/
151
- * 对于小程序开发者,按照 wx 的文档格式来定义 json 文件
152
- * 根据端侧需求将 json 文件的 pages 字段转换为 bilibili 格式
153
- * @param miniprogramDir 小程序目录(带miniprogramRoot)
154
- * @returns 转换后的 bilibili 格式的 app.json
155
- */
156
- const transformAppJson = (mpDir, miniprogramDir, extJsonPath, compilation) => {
157
- componentIndex = 1;
158
- const appJSONPath = (0, common_1.unixResolve)(miniprogramDir, 'app.json');
159
- let appJSON = readJson(appJSONPath, compilation);
160
- appJSON.subPackages = appJSON.subPackages || appJSON.subpackages || [];
161
- appJSON = (0, validateAppJson_1.default)(appJSON, compilation);
162
- const extJSON = extJsonPath ? readJson(`${extJsonPath}/ext.json`, compilation) : {};
163
- if (extJSON === null || extJSON === void 0 ? void 0 : extJSON.extEnable) {
164
- appJSON = (0, combineExtJson_1.default)(appJSON, extJSON, compilation);
165
- }
166
- appJSON.componentsMap = {};
167
- // 收集全局组件
168
- if (appJSON.usingComponents) {
169
- for (const [compName, compPath] of Object.entries(appJSON.usingComponents)) {
170
- const compRootPath = formatComponentsPath(mpDir, miniprogramDir, '', compPath);
171
- appJSON.usingComponents[compName] = compRootPath;
172
- collectComponents(appJSON, mpDir, miniprogramDir, compRootPath);
173
- }
174
- }
175
- appJSON.pages = formatPages(appJSON.pages, mpDir, miniprogramDir, extJSON, appJSON);
176
- appJSON.subPackages = appJSON.subPackages.map(pkg => {
177
- // @ts-ignore
178
- const pkgPages = pkg.pages.map(page => (0, common_1.unixJoin)(pkg.root, page));
179
- return Object.assign(Object.assign({}, pkg), { pages: formatPages(pkgPages, mpDir, miniprogramDir, extJSON, appJSON) });
180
- });
181
- // 向前兼容字段,用于运行时消费,处理 breakChange 的场景
182
- appJSON.xhsVersionStrategy = {
183
- classCalc: 'v1',
184
- pageNotFoundMigration: true,
185
- animationEventTriggerPatchPerfix: 'xhs_animate_',
186
- renderEventDelegation: true,
187
- touchEventMigration: 'v2'
188
- // lazyCodeLoading: true
189
- };
190
- // legacyAppJSON: 兼容的整包,将 subPackages 合并到 pages 内
191
- const legacyAppJSON = (0, clone_1.default)(appJSON);
192
- Reflect.deleteProperty(legacyAppJSON, 'subPackages');
193
- const legacySubPackages = subPackages2Pages(appJSON.subPackages);
194
- legacyAppJSON.pages = legacySubPackages
195
- ? [...legacyAppJSON.pages, ...legacySubPackages]
196
- : legacyAppJSON.pages;
197
- return { legacyAppJSON, appJSON };
198
- };
199
- exports.default = transformAppJson;
@@ -1,4 +0,0 @@
1
- import { Compilation } from 'webpack';
2
- export declare const isPackagesPathCrossed: (p1: any, p2: any) => boolean;
3
- declare const validateAppJson: (appJSON: any, compilation?: Compilation) => any;
4
- export default validateAppJson;
@@ -1,111 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isPackagesPathCrossed = void 0;
4
- const webpack_1 = require("webpack");
5
- // 判断两个路径是否存在交集
6
- const isPackagesPathCrossed = (p1, p2) => {
7
- if (p1 === p2) {
8
- return true;
9
- }
10
- if (p1.startsWith(p2) && p1.replace(p2, '').startsWith('/')) {
11
- return true;
12
- }
13
- if (p2.startsWith(p1) && p2.replace(p1, '').startsWith('/')) {
14
- return true;
15
- }
16
- return false;
17
- };
18
- exports.isPackagesPathCrossed = isPackagesPathCrossed;
19
- const validateAppJson = (appJSON, compilation) => {
20
- const emitError = (details) => {
21
- const err = new webpack_1.WebpackError(`[ app.json 内容错误 ]: ${details}`);
22
- err.file = 'app.json';
23
- err.stack = undefined;
24
- compilation === null || compilation === void 0 ? void 0 : compilation.errors.push(err);
25
- return { pages: [], subPackages: [] };
26
- };
27
- const appPages = appJSON.pages;
28
- if (!('pages' in appJSON)) {
29
- return emitError('缺少 pages 字段');
30
- }
31
- if (appJSON.pages.length <= 0) {
32
- return emitError('pages 不能为空');
33
- }
34
- if (appJSON.window) {
35
- if (appJSON.window.navigationBarTextStyle) {
36
- if (!['black', 'white'].includes(appJSON.window.navigationBarTextStyle)) {
37
- return emitError(`window.navigationBarTextStyle 错误: 仅支持 black / white`);
38
- }
39
- }
40
- if (appJSON.window.backgroundTextStyle) {
41
- if (!['dark', 'light'].includes(appJSON.window.backgroundTextStyle)) {
42
- return emitError(`window.backgroundTextStyle 错误: 仅支持 dark / light`);
43
- }
44
- }
45
- if (appJSON.window.navigationStyle) {
46
- if (!['default', 'custom'].includes(appJSON.window.navigationStyle)) {
47
- return emitError(`window.navigationStyle 错误: 仅支持 default / custom`);
48
- }
49
- }
50
- }
51
- if (appJSON.tabBar) {
52
- if (appJSON.tabBar.list) {
53
- if (appJSON.tabBar.list.length < 2) {
54
- return emitError(`tabBar.list 错误: tabBar.list 需至少包含 2 项`);
55
- }
56
- if (appJSON.tabBar.list.length > 5) {
57
- return emitError(`tabBar.list 错误: tabBar.list 不能超过 5 项`);
58
- }
59
- for (const { pagePath } of appJSON.tabBar.list) {
60
- if (!pagePath) {
61
- return emitError(`tabBar.list 错误: "pagePath" 不能为空`);
62
- }
63
- if (!appPages.includes(pagePath)) {
64
- return emitError(`tabBar.list 错误: "${pagePath}" 不在 "pages" 内`);
65
- }
66
- }
67
- }
68
- else {
69
- return emitError('tabBar.list 不能为空');
70
- }
71
- }
72
- if (appJSON.subPackages.length) {
73
- const subPackageRoots = [];
74
- const subPackageNames = [];
75
- for (let i = 0; i < appJSON.subPackages.length; i++) {
76
- if (typeof appJSON.subPackages[i].root !== 'string') {
77
- return emitError(`subPackages[${i}].root 字段类型需为 string`);
78
- }
79
- if (appJSON.subPackages[i].name) {
80
- const repeatNameIndex = subPackageNames.indexOf(appJSON.subPackages[i].name);
81
- if (repeatNameIndex > -1) {
82
- return emitError(`subPackages[${i}] 与 subPackages[${repeatNameIndex}] 的 name 相同`);
83
- }
84
- subPackageNames.push(appJSON.subPackages[i].name);
85
- }
86
- subPackageRoots.push(appJSON.subPackages[i].root);
87
- }
88
- for (let i = 0; i < subPackageRoots.length; i++) {
89
- if (!subPackageRoots[i]) {
90
- return emitError(`subPackages[${i}].root 不能为空`);
91
- }
92
- if (!appJSON.subPackages[i].pages) {
93
- return emitError(`subPackages[${i}].pages 不能为空`);
94
- }
95
- const pageIndex = appPages.findIndex(page => (0, exports.isPackagesPathCrossed)(page, subPackageRoots[i]));
96
- if (pageIndex > -1) {
97
- return emitError(`pages[${pageIndex}] 与 subPackages[${i}] 存在包含关系`);
98
- }
99
- for (let j = i + 1; j < subPackageRoots.length; j++) {
100
- if ((0, exports.isPackagesPathCrossed)(subPackageRoots[i], subPackageRoots[j])) {
101
- return emitError(`subPackages[${i}] 与 subPackages[${j}] 存在包含关系`);
102
- }
103
- }
104
- }
105
- }
106
- if (appJSON.networkTimeout && typeof appJSON.networkTimeout !== 'object') {
107
- return emitError('networkTimeout 字段需为 object');
108
- }
109
- return appJSON;
110
- };
111
- exports.default = validateAppJson;
@@ -1,4 +0,0 @@
1
- import { Configuration } from 'webpack';
2
- import { CliConfig } from '../types';
3
- declare const formulaWebpackConfig: (options: CliConfig) => Configuration[];
4
- export default formulaWebpackConfig;
@@ -1,41 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const webpack_chain_1 = __importDefault(require("webpack-chain"));
7
- const mp_1 = __importDefault(require("./presets/mp"));
8
- const render_1 = __importDefault(require("./presets/render"));
9
- const service_1 = __importDefault(require("./presets/service"));
10
- const common_1 = __importDefault(require("./presets/common"));
11
- const babel_1 = __importDefault(require("./presets/babel"));
12
- const prod_1 = __importDefault(require("./presets/prod"));
13
- const XhsResolveLimitPlugin_1 = __importDefault(require("./presets/service/XhsResolveLimitPlugin"));
14
- const types_1 = require("../types");
15
- const formulaWebpackConfig = (options) => {
16
- const mpChain = new webpack_chain_1.default();
17
- const serviceChain = new webpack_chain_1.default();
18
- const renderChain = new webpack_chain_1.default();
19
- const mpPresets = [mp_1.default, common_1.default];
20
- const servicePresets = [service_1.default, common_1.default, babel_1.default];
21
- const renderPresets = [render_1.default, common_1.default, babel_1.default];
22
- if (options.env === types_1.ENV.production) {
23
- mpPresets.push(prod_1.default);
24
- servicePresets.push(prod_1.default);
25
- renderPresets.push(prod_1.default);
26
- }
27
- mpPresets.forEach(preset => preset(mpChain, Object.assign(Object.assign({}, options), { noJs: true })));
28
- servicePresets.forEach(preset => preset(serviceChain, options));
29
- renderPresets.forEach(preset => preset(renderChain, options));
30
- const mpConfig = mpChain.toConfig();
31
- const serviceConfig = serviceChain.toConfig();
32
- const renderConfig = renderChain.toConfig();
33
- // entry 都是通过 Plugin 创建
34
- mpConfig.entry = {};
35
- serviceConfig.entry = {};
36
- renderConfig.entry = {};
37
- // @ts-ignore 分包引用限制插件,仅在 service 中需要
38
- serviceConfig.resolve.plugins = [new XhsResolveLimitPlugin_1.default(options)];
39
- return [mpConfig, serviceConfig, renderConfig];
40
- };
41
- exports.default = formulaWebpackConfig;
@@ -1,13 +0,0 @@
1
- declare const CONSTANTS: {
2
- PROD_BROWSERSLIST: string[];
3
- DEV_BROWSERSLIST: string[];
4
- DEV_TARGETS: {
5
- chrome: string;
6
- };
7
- PROD_TARGETS: {
8
- chrome: string;
9
- ios: string;
10
- };
11
- ENTRY_CSS_NAME: string;
12
- };
13
- export default CONSTANTS;
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const CONSTANTS = {
4
- PROD_BROWSERSLIST: ['ios_saf >= 10', 'chrome >= 83'],
5
- DEV_BROWSERSLIST: ['last 2 chrome version'],
6
- DEV_TARGETS: {
7
- chrome: '90',
8
- },
9
- PROD_TARGETS: {
10
- chrome: '83',
11
- ios: '10'
12
- },
13
- ENTRY_CSS_NAME: 'app',
14
- };
15
- exports.default = CONSTANTS;
@@ -1,31 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const getMlSuffixName_1 = __importDefault(require("../../utils/getMlSuffixName"));
7
- const common_1 = require("../../utils/common");
8
- function entryLoader() {
9
- const { appJSON, miniprogramDir, jsonDependencies } = this._compiler.xhsData;
10
- const { pkg, root } = this.getOptions();
11
- const subPackageRoots = appJSON.subPackages.map(pkg => pkg.root);
12
- const entries = [];
13
- for (const file of jsonDependencies) {
14
- this.addDependency(file);
15
- }
16
- const isFileInMainPkg = filePath => subPackageRoots.every(root => !filePath.startsWith(`${root}/`));
17
- Object.keys(appJSON.componentsMap).forEach(compPath => {
18
- const push = () => entries.push(`'${compPath}': () => require('${(0, common_1.unixJoin)(miniprogramDir, `${compPath}.${(0, getMlSuffixName_1.default)()}`)}')`);
19
- if (pkg === 'main' && isFileInMainPkg(compPath)) {
20
- push();
21
- }
22
- if (pkg === 'sub' && compPath.startsWith(`${root}/`)) {
23
- push();
24
- }
25
- });
26
- return `
27
- export default {
28
- ${entries.join(',\n ')}
29
- }`;
30
- }
31
- module.exports = entryLoader;
@@ -1,24 +0,0 @@
1
- "use strict";
2
- // @ts-nocheck
3
- var __importDefault = (this && this.__importDefault) || function (mod) {
4
- return (mod && mod.__esModule) ? mod : { "default": mod };
5
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- const getMlSuffixName_1 = __importDefault(require("../../utils/getMlSuffixName"));
8
- const common_1 = require("../../utils/common");
9
- function entryLoader() {
10
- const { miniprogramDir, jsonDependencies } = this._compiler.xhsData;
11
- const { compPath } = this.getOptions();
12
- const { pkg, root } = this.getOptions();
13
- for (const file of jsonDependencies) {
14
- this.addDependency(file);
15
- }
16
- let name = 'XHS_COMPONENTS';
17
- if (pkg === 'sub') {
18
- name = `XHS_COMPONENTS_${root}`;
19
- }
20
- return `
21
- ;(globalThis['${name}'] || (globalThis['${name}'] = { default: {} })).default['${compPath}'] = () => require('${(0, common_1.unixJoin)(miniprogramDir, `${compPath}.${(0, getMlSuffixName_1.default)()}`)}')
22
- `;
23
- }
24
- module.exports = entryLoader;
@@ -1,50 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const fs_extra_1 = require("fs-extra");
7
- const utils_1 = require("./utils");
8
- const getMlSuffixName_1 = __importDefault(require("../../utils/getMlSuffixName"));
9
- const depenedHelper_1 = require("../../utils/depenedHelper");
10
- const common_1 = require("../../utils/common");
11
- // @ts-ignore
12
- function entryLoader() {
13
- const { miniprogramDir, appJSON, jsonDependencies } = this._compiler.xhsData;
14
- const { mode, path } = this.getOptions();
15
- for (const file of jsonDependencies) {
16
- this.addDependency(file);
17
- }
18
- const appCssPath = (0, common_1.unixResolve)(miniprogramDir, 'app.css');
19
- const appCssExist = (0, fs_extra_1.existsSync)(appCssPath);
20
- const absolutePath = (0, common_1.unixResolve)(miniprogramDir, `${path}.${(0, getMlSuffixName_1.default)()}`);
21
- const subPackage = (appJSON.subPackages || []).find(subPack => !!subPack.pages.find(page => page.path === path));
22
- const enableLazyCodeLoading = mode === 'v2';
23
- // 资源文件
24
- const resources = (0, utils_1.getResourceUris)({ appCssExist, subPackage, enableLazyCodeLoading });
25
- // 开启了按需注入,注入依赖组件
26
- if (enableLazyCodeLoading) {
27
- const isIndependent = (subPackage === null || subPackage === void 0 ? void 0 : subPackage.independent) || false;
28
- const enableSubPackage = (0, depenedHelper_1.shouldEnableSubPackage)(appJSON);
29
- const dependsTree = (0, depenedHelper_1.getPageDependComponentPaths)(path, appJSON, isIndependent, enableSubPackage);
30
- const subPackagesPrefix = (appJSON.subPackages || []).map(sub => sub.root);
31
- const depends = [];
32
- for (let i = 0; i < dependsTree.length; i++) {
33
- let uri = dependsTree[i];
34
- const subRoot = subPackagesPrefix.find(subRoot => uri.startsWith(`${subRoot}/`));
35
- if (subRoot) {
36
- uri = `${subRoot}/${uri}`;
37
- }
38
- depends.push(uri);
39
- }
40
- return `
41
- import Component from '${absolutePath}';
42
- globalThis.__render.mount(Component, '${path}', ${JSON.stringify(resources)}, ${JSON.stringify(depends)})
43
- `;
44
- }
45
- return `
46
- import Component from '${absolutePath}';
47
- globalThis.__render.mount(Component, '${path}', ${JSON.stringify(resources)})
48
- `;
49
- }
50
- module.exports = entryLoader;
@@ -1 +0,0 @@
1
- export {};
@@ -1,51 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- // @ts-nocheck
4
- const fs_extra_1 = require("fs-extra");
5
- const common_1 = require("../../utils/common");
6
- function entryLoader() {
7
- var _a, _b;
8
- const { appJSON, miniprogramDir, jsonDependencies } = this._compiler.xhsData;
9
- const { pkg, root } = this.getOptions();
10
- const entries = [];
11
- for (const file of jsonDependencies) {
12
- this.addDependency(file);
13
- }
14
- const addAppJs = () => {
15
- if ((0, fs_extra_1.existsSync)(`${miniprogramDir}/app.js`) || (0, fs_extra_1.existsSync)(`${miniprogramDir}/app.ts`)) {
16
- entries.unshift(`'app': require('${(0, common_1.toUnixPath)(`${miniprogramDir}/app`)}')`);
17
- }
18
- };
19
- const addServiceJS = (shortPath) => {
20
- const assetName = (0, common_1.toUnixPath)(shortPath);
21
- const requirePath = (0, common_1.unixJoin)(miniprogramDir, shortPath);
22
- entries.push(`'${assetName}': () => require('${requirePath}')`);
23
- };
24
- const components = Object.keys(appJSON.componentsMap);
25
- if (pkg === 'main') {
26
- // 主包 app.js
27
- addAppJs();
28
- // 主包页面逻辑层
29
- appJSON.pages.forEach(page => addServiceJS(page.path));
30
- // 主包组件逻辑层
31
- const subPackageRoots = appJSON.subPackages.map(pkg => pkg.root);
32
- components
33
- .filter(compPath => subPackageRoots.every(subRoot => !compPath.startsWith(`${subRoot}/`)))
34
- .forEach(compPath => addServiceJS(compPath));
35
- }
36
- if (pkg === 'sub') {
37
- // 分包页面逻辑层
38
- (_b = (_a = appJSON.subPackages
39
- .find(pkg => pkg.root === root)) === null || _a === void 0 ? void 0 : _a.pages) === null || _b === void 0 ? void 0 : _b.forEach(page => addServiceJS(page.path));
40
- // 分包组件逻辑层
41
- components
42
- .filter(compPath => compPath.startsWith(`${root}/`))
43
- .forEach(compPath => addServiceJS(compPath));
44
- }
45
- return `;globalThis['__MP_APP_JSON__'] = ${JSON.stringify(appJSON)};
46
-
47
- export default {
48
- ${entries.join(',\n ')}
49
- }`;
50
- }
51
- module.exports = entryLoader;
@@ -1,19 +0,0 @@
1
- import { TemplateCompiler, CompilerOptions, SFCTemplateCompileOptions, SFCScriptCompileOptions } from 'vue/compiler-sfc';
2
- import { Compiler, Plugin } from 'webpack';
3
- export interface VueLoaderOptions {
4
- babelParserPlugins?: SFCScriptCompileOptions['babelParserPlugins'];
5
- transformAssetUrls?: SFCTemplateCompileOptions['transformAssetUrls'];
6
- compiler?: TemplateCompiler | string;
7
- compilerOptions?: CompilerOptions;
8
- refSugar?: boolean;
9
- customElement?: boolean | RegExp;
10
- hotReload?: boolean;
11
- exposeFilename?: boolean;
12
- appendExtension?: boolean;
13
- isServerBuild?: boolean;
14
- }
15
- declare class VueLoaderPlugin implements Plugin {
16
- static NS: string;
17
- apply(compiler: Compiler): void;
18
- }
19
- export default VueLoaderPlugin;