uni.plugin.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  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 path_1 = __importDefault(require("path"));
  7. const fast_glob_1 = require("fast-glob");
  8. const shared_1 = require("@vue/shared");
  9. const uni_shared_1 = require("@dcloudio/uni-shared");
  10. const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
  11. const validateFunction_1 = require("./validateFunction");
  12. const uniCloudSpaces = [];
  13. const initUniCloudEnvOnce = (0, uni_shared_1.once)(initUniCloudEnv);
  14. initUniCloudEnvOnce();
  15. /**
  16. * @type {import('vite').Plugin}
  17. */
  18. function uniCloudPlugin() {
  19. return {
  20. name: 'uni:cloud',
  21. config(config) {
  22. const silent = config.build && config.build.ssr ? true : false;
  23. if (silent) {
  24. return;
  25. }
  26. const len = uniCloudSpaces.length;
  27. if (!len) {
  28. return;
  29. }
  30. if ((0, uni_cli_shared_1.isInHybridNVue)(config)) {
  31. return;
  32. }
  33. if (len === 1) {
  34. console.log(`本项目的uniCloud使用的默认服务空间spaceId为:${uniCloudSpaces[0].id}`);
  35. }
  36. if (process.env.UNI_PLATFORM === 'h5' &&
  37. !process.env.UNI_SUB_PLATFORM &&
  38. process.env.NODE_ENV === 'production') {
  39. console.warn('发布到web端需要在uniCloud后台操作,绑定安全域名,否则会因为跨域问题而无法访问。教程参考:https://uniapp.dcloud.net.cn/uniCloud/publish.html#useinh5');
  40. }
  41. return {};
  42. },
  43. configureServer(server) {
  44. if (server.httpServer) {
  45. server.httpServer.on('listening', () => {
  46. process.nextTick(() => {
  47. initUniCloudWarningOnce();
  48. });
  49. });
  50. }
  51. else {
  52. initUniCloudWarningOnce();
  53. }
  54. },
  55. closeBundle() {
  56. if (process.env.UNI_PLATFORM === 'h5' && !process.env.UNI_SSR_CLIENT) {
  57. console.log();
  58. console.log('欢迎将web站点部署到uniCloud前端网页托管平台,高速、免费、安全、省心,详见:https://uniapp.dcloud.io/uniCloud/hosting');
  59. }
  60. },
  61. };
  62. }
  63. const initUniCloudWarningOnce = (0, uni_shared_1.once)(() => {
  64. uniCloudSpaces.length &&
  65. console.warn('当前项目使用了uniCloud,为避免云函数调用跨域问题,建议在HBuilderX内置浏览器里调试。如使用外部浏览器需处理跨域,请将访问页面对应的IP或域名配置在要访问的云函数所在的服务空间的跨域配置内,详见:https://uniapp.dcloud.net.cn/uniCloud/publish.html#useinh5');
  66. });
  67. function checkProjectUniCloudDir() {
  68. return !!(0, fast_glob_1.sync)(['uniCloud-aliyun', 'uniCloud-tcb', 'uniCloud-alipay', 'uniCloud-dcloud'], {
  69. cwd: (0, uni_cli_shared_1.isInHBuilderX)()
  70. ? process.env.UNI_INPUT_DIR
  71. : process.env.UNI_CLI_CONTEXT,
  72. onlyDirectories: true,
  73. onlyFiles: false,
  74. ignore: ['node_modules'],
  75. }).length;
  76. }
  77. function resolveUniCloudModules() {
  78. return (0, fast_glob_1.sync)('**/uni_modules/*/uniCloud', {
  79. cwd: process.env.UNI_INPUT_DIR,
  80. onlyDirectories: true,
  81. onlyFiles: false,
  82. ignore: ['node_modules'],
  83. }).map((dir) => path_1.default.dirname(dir));
  84. }
  85. function checkUniModules() {
  86. if (!checkProjectUniCloudDir()) {
  87. const uniCloudModules = resolveUniCloudModules();
  88. if (uniCloudModules.length) {
  89. console.warn(`${uniCloudModules.join(', ')} 使用了uniCloud,而项目未启用uniCloud。需在项目点右键创建uniCloud环境`);
  90. }
  91. }
  92. }
  93. function initUniCloudEnv() {
  94. checkUniModules();
  95. if (process.env.UNI_CLOUD_PROVIDER) {
  96. const spaces = JSON.parse(process.env.UNI_CLOUD_PROVIDER);
  97. if (!(0, shared_1.isArray)(spaces)) {
  98. return;
  99. }
  100. if (spaces.length) {
  101. uniCloudSpaces.push(...spaces);
  102. return;
  103. }
  104. }
  105. process.env.UNI_CLOUD_PROVIDER = JSON.stringify([]);
  106. if (!process.env.UNI_CLOUD_SPACES) {
  107. return;
  108. }
  109. try {
  110. const spaces = JSON.parse(process.env.UNI_CLOUD_SPACES);
  111. if (!(0, shared_1.isArray)(spaces)) {
  112. return;
  113. }
  114. spaces.forEach((s) => uniCloudSpaces.push(s));
  115. process.env.UNI_CLOUD_PROVIDER = JSON.stringify(uniCloudSpaces.map((space) => {
  116. if (space.provider === 'tcb') {
  117. space.provider = 'tencent';
  118. }
  119. if (!space.provider && space.clientSecret) {
  120. space.provider = 'aliyun';
  121. }
  122. switch (space.provider) {
  123. case 'aliyun':
  124. case 'dcloud':
  125. return {
  126. provider: space.provider || 'aliyun',
  127. spaceName: space.name,
  128. spaceId: space.id,
  129. clientSecret: space.clientSecret,
  130. endpoint: space.apiEndpoint,
  131. };
  132. case 'alipay': {
  133. return {
  134. provider: space.provider,
  135. spaceName: space.name,
  136. spaceId: space.id,
  137. spaceAppId: space.spaceAppId,
  138. accessKey: space.accessKey,
  139. secretKey: space.secretKey,
  140. };
  141. }
  142. case 'tencent':
  143. default: {
  144. return {
  145. provider: space.provider,
  146. spaceName: space.name,
  147. spaceId: space.id,
  148. };
  149. }
  150. }
  151. }));
  152. }
  153. catch (e) { }
  154. }
  155. exports.default = () => [
  156. (0, uni_cli_shared_1.defineUniMainJsPlugin)((opts) => {
  157. return {
  158. name: 'uni:cloud',
  159. enforce: 'pre',
  160. config(config, env) {
  161. if ((0, uni_cli_shared_1.isSsr)(env.command, config)) {
  162. return;
  163. }
  164. const inputDir = process.env.UNI_INPUT_DIR;
  165. const platform = process.env.UNI_PLATFORM;
  166. const isSecureNetworkEnabled = (0, uni_cli_shared_1.isEnableSecureNetwork)(inputDir, platform);
  167. return {
  168. define: {
  169. 'process.env.UNI_SECURE_NETWORK_ENABLE': isSecureNetworkEnabled,
  170. 'process.env.UNI_SECURE_NETWORK_CONFIG': process.env.UNI_SECURE_NETWORK_CONFIG || JSON.stringify([]),
  171. },
  172. };
  173. },
  174. transform(code, id) {
  175. if (!opts.filter(id)) {
  176. return;
  177. }
  178. if (uniCloudSpaces.length) {
  179. return {
  180. code: code + `;\nimport '@dcloudio/uni-cloud';`,
  181. map: null,
  182. };
  183. }
  184. },
  185. };
  186. }),
  187. uniCloudPlugin(),
  188. // x 里边统一处理
  189. ...(process.env.UNI_APP_X === 'true'
  190. ? []
  191. : [
  192. (0, uni_cli_shared_1.uniViteInjectPlugin)('uni:cloud-inject', {
  193. exclude: [...uni_cli_shared_1.COMMON_EXCLUDE],
  194. uniCloud: ['@dcloudio/uni-cloud', 'default'],
  195. }),
  196. ]),
  197. (0, validateFunction_1.uniValidateFunctionPlugin)(),
  198. ];