index.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  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.runBuild = exports.runDev = void 0;
  7. const fs_1 = __importDefault(require("fs"));
  8. const debug_1 = __importDefault(require("debug"));
  9. const vite_1 = __importDefault(require("unplugin-auto-import/vite"));
  10. const plugin_vue_jsx_1 = __importDefault(require("@vitejs/plugin-vue-jsx"));
  11. const plugin_legacy_1 = __importDefault(require("@vitejs/plugin-legacy"));
  12. const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
  13. const config_1 = require("./config");
  14. const configResolved_1 = require("./configResolved");
  15. const copy_1 = require("./plugins/copy");
  16. const move_1 = require("./plugins/move");
  17. const utils_1 = require("./utils");
  18. const vue_1 = require("./vue");
  19. const utils_2 = require("./cli/utils");
  20. const plugins_1 = require("./uvue/plugins");
  21. const debugUni = (0, debug_1.default)('uni:plugin');
  22. (0, uni_cli_shared_1.initModuleAlias)();
  23. var action_1 = require("./cli/action");
  24. Object.defineProperty(exports, "runDev", { enumerable: true, get: function () { return action_1.runDev; } });
  25. Object.defineProperty(exports, "runBuild", { enumerable: true, get: function () { return action_1.runBuild; } });
  26. let isFirst = true;
  27. function uniPlugin(rawOptions = {}) {
  28. // 重写readFileSync,拦截.scss 等文件读取,实现条件编译,
  29. (0, uni_cli_shared_1.rewriteScssReadFileSync)();
  30. if ((0, uni_cli_shared_1.isInHBuilderX)()) {
  31. (0, uni_cli_shared_1.rewriteExistsSyncHasRootFile)();
  32. }
  33. // 三方插件(如vitest)可能提供了自己的入口命令,需要补充 env 初始化逻辑
  34. (0, utils_2.initEnv)('unknown', { platform: process.env.UNI_PLATFORM || 'h5' });
  35. const options = {
  36. ...rawOptions,
  37. base: '/',
  38. assetsDir: 'assets',
  39. inputDir: '',
  40. outputDir: '',
  41. command: 'serve',
  42. platform: 'h5',
  43. };
  44. options.platform = process.env.UNI_PLATFORM || 'h5';
  45. options.inputDir = process.env.UNI_INPUT_DIR;
  46. const plugins = process.env.UNI_APP_X === 'true' &&
  47. process.env.UNI_UTS_PLATFORM === 'app-android'
  48. ? createUVueAndroidPlugins(options)
  49. : createPlugins(options);
  50. // x 提供 auto import(非android、android自行处理)
  51. if (process.env.UNI_APP_X === 'true' &&
  52. process.env.UNI_UTS_PLATFORM !== 'app-android') {
  53. plugins.unshift((0, vite_1.default)((0, uni_cli_shared_1.initAutoImportOptions)(process.env.UNI_UTS_PLATFORM, options.autoImportOptions || {})));
  54. }
  55. return plugins;
  56. }
  57. exports.default = uniPlugin;
  58. function createPlugins(options) {
  59. const plugins = [];
  60. // uni x 需要插入到指定位置,此插件执行太早,又会引发 vue 文件的不支持,该插件是解析ast的,所以必须是合法的js或ts代码
  61. if (process.env.UNI_APP_X === 'true') {
  62. plugins.push((0, uni_cli_shared_1.uniUTSExtApiReplace)());
  63. }
  64. else {
  65. const injects = (0, uni_cli_shared_1.parseUniExtApis)(true, process.env.UNI_UTS_PLATFORM, 'javascript');
  66. if (Object.keys(injects).length) {
  67. plugins.push((0, uni_cli_shared_1.uniViteInjectPlugin)('uni:ext-api-inject', injects));
  68. }
  69. }
  70. // 仅限 h5
  71. if (options.viteLegacyOptions && options.platform === 'h5') {
  72. plugins.push(...(0, plugin_legacy_1.default)((0, vue_1.initPluginViteLegacyOptions)(options)));
  73. }
  74. const uniPlugins = (0, utils_1.initExtraPlugins)(process.env.UNI_CLI_CONTEXT || process.cwd(), process.env.UNI_PLATFORM || 'h5', options);
  75. debugUni(uniPlugins);
  76. const uniPluginOptions = (0, utils_1.initPluginUniOptions)(uniPlugins);
  77. options.copyOptions = uniPluginOptions.copyOptions;
  78. if (options.vueJsxOptions) {
  79. plugins.push((0, plugin_vue_jsx_1.default)((0, vue_1.initPluginVueJsxOptions)(options, uniPluginOptions.compilerOptions, uniPluginOptions.jsxOptions)));
  80. }
  81. plugins.push({
  82. name: 'uni',
  83. config: (0, config_1.createConfig)(options, uniPlugins),
  84. // resolveId: createResolveId(options),
  85. configResolved: (0, configResolved_1.createConfigResolved)(options),
  86. });
  87. plugins.push(...uniPlugins);
  88. // plugins.push(...initFixedEsbuildInitTSConfck(process.env.UNI_INPUT_DIR))
  89. // 执行 build 命令时,vite 强制了 NODE_ENV
  90. // https://github.com/vitejs/vite/blob/main/packages/vite/src/node/build.ts#L405
  91. // const config = await resolveConfig(inlineConfig, 'build', 'production')
  92. // 在 @vitejs/plugin-vue 之前校正回来
  93. if (process.env.UNI_NODE_ENV &&
  94. process.env.UNI_NODE_ENV !== process.env.NODE_ENV) {
  95. process.env.NODE_ENV = process.env.UNI_NODE_ENV;
  96. }
  97. plugins.unshift((0, vue_1.createPluginVueInstance)((0, vue_1.initPluginVueOptions)(options, uniPlugins, uniPluginOptions)));
  98. let addCopyPlugin = false;
  99. if (options.platform !== 'app') {
  100. addCopyPlugin = true;
  101. }
  102. else {
  103. // 仅在 vue 或 纯原生 App.vue 编译时做 copy
  104. if (process.env.UNI_COMPILER === 'vue' ||
  105. (process.env.UNI_RENDERER === 'native' &&
  106. process.env.UNI_RENDERER_NATIVE === 'appService')) {
  107. addCopyPlugin = true;
  108. }
  109. else if (process.env.UNI_APP_X === 'true') {
  110. // app-ios
  111. addCopyPlugin = true;
  112. }
  113. }
  114. if (addCopyPlugin) {
  115. plugins.push((0, copy_1.uniCopyPlugin)({
  116. outputDir: process.env.UNI_OUTPUT_DIR,
  117. copyOptions: options.copyOptions,
  118. }));
  119. }
  120. if (process.env.SOURCEMAP === 'true') {
  121. // 清空之前的 sourcemap 目录
  122. const sourceMapPath = (0, uni_cli_shared_1.resolveSourceMapPath)();
  123. if (isFirst) {
  124. // 避免重复清空
  125. isFirst = false;
  126. if (fs_1.default.existsSync(sourceMapPath)) {
  127. (0, uni_cli_shared_1.emptyDir)(sourceMapPath);
  128. }
  129. plugins.push((0, move_1.uniMovePlugin)({
  130. apply: 'build',
  131. enforce: 'post',
  132. cwd: process.env.UNI_OUTPUT_DIR,
  133. pattern: '**/*.js.map',
  134. dest: sourceMapPath,
  135. }));
  136. }
  137. }
  138. (0, utils_1.rewriteCompilerSfcParse)();
  139. return plugins;
  140. }
  141. function createUVueAndroidPlugins(options) {
  142. const plugins = [];
  143. options.uvue = true;
  144. const uniPlugins = (0, utils_1.initExtraPlugins)(process.env.UNI_CLI_CONTEXT || process.cwd(), process.env.UNI_PLATFORM || 'h5', options);
  145. debugUni(uniPlugins);
  146. const uniPluginOptions = (0, utils_1.initPluginUniOptions)(uniPlugins);
  147. options.copyOptions = uniPluginOptions.copyOptions;
  148. plugins.push((0, plugins_1.uniUVuePlugin)(options));
  149. plugins.push(...uniPlugins);
  150. // plugins.push(...initFixedEsbuildInitTSConfck(process.env.UNI_INPUT_DIR))
  151. // 执行 build 命令时,vite 强制了 NODE_ENV
  152. // https://github.com/vitejs/vite/blob/main/packages/vite/src/node/build.ts#L405
  153. // const config = await resolveConfig(inlineConfig, 'build', 'production')
  154. // 在 @vitejs/plugin-vue 之前校正回来
  155. if (process.env.UNI_NODE_ENV &&
  156. process.env.UNI_NODE_ENV !== process.env.NODE_ENV) {
  157. process.env.NODE_ENV = process.env.UNI_NODE_ENV;
  158. }
  159. plugins.push((0, copy_1.uniCopyPlugin)({
  160. outputDir: process.env.UNI_OUTPUT_DIR,
  161. copyOptions: options.copyOptions,
  162. }));
  163. return plugins;
  164. }