options.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.initPluginViteLegacyOptions = exports.initPluginVueJsxOptions = exports.initPluginVueOptions = exports.createPluginVueInstance = void 0;
  4. const shared_1 = require("@vue/shared");
  5. const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
  6. const utils_1 = require("../utils");
  7. const pluginVuePath = require.resolve('@vitejs/plugin-vue');
  8. const normalizedPluginVuePath = (0, uni_cli_shared_1.normalizePath)(pluginVuePath);
  9. /**
  10. * 每次创建新的 plugin-vue 实例。因为该插件内部会 cache descriptor,而相同的vue文件在编译到vue页面和nvue页面时,不能共享缓存(条件编译,css scoped等均不同)
  11. * @returns
  12. */
  13. function createPluginVueInstance(options) {
  14. delete require.cache[pluginVuePath];
  15. delete require.cache[normalizedPluginVuePath];
  16. const vuePlugin = require('@vitejs/plugin-vue');
  17. return vuePlugin(options);
  18. }
  19. exports.createPluginVueInstance = createPluginVueInstance;
  20. function initPluginVueOptions(options, UniVitePlugins, uniPluginOptions) {
  21. const vueOptions = options.vueOptions || (options.vueOptions = {});
  22. // if (!hasOwn(vueOptions, 'reactivityTransform')) {
  23. // vueOptions.reactivityTransform = true
  24. // }
  25. if (!vueOptions.include) {
  26. vueOptions.include = [];
  27. }
  28. if (!(0, shared_1.isArray)(vueOptions.include)) {
  29. vueOptions.include = [vueOptions.include];
  30. }
  31. vueOptions.include.push(uni_cli_shared_1.EXTNAME_VUE_RE);
  32. const styleOptions = vueOptions.style || (vueOptions.style = {});
  33. if (!styleOptions.postcssPlugins) {
  34. styleOptions.postcssPlugins = [];
  35. }
  36. // 解析 scoped 中 deep 等特殊语法
  37. styleOptions.postcssPlugins.push((0, uni_cli_shared_1.uniPostcssScopedPlugin)());
  38. const templateOptions = vueOptions.template || (vueOptions.template = {});
  39. const compilerOptions = templateOptions.compilerOptions || (templateOptions.compilerOptions = {});
  40. const { compiler, styleOptions: { postcssPlugins }, compilerOptions: { miniProgram, isNativeTag, isCustomElement, nodeTransforms, directiveTransforms, }, } = uniPluginOptions;
  41. if (postcssPlugins) {
  42. styleOptions.postcssPlugins.push(...postcssPlugins);
  43. }
  44. if (compiler) {
  45. templateOptions.compiler = compiler;
  46. }
  47. if (miniProgram) {
  48. ;
  49. compilerOptions.miniProgram = miniProgram;
  50. }
  51. if (isNativeTag) {
  52. const userIsNativeTag = compilerOptions.isNativeTag;
  53. compilerOptions.isNativeTag = (tag) => {
  54. if (isNativeTag(tag)) {
  55. return true;
  56. }
  57. if (userIsNativeTag && userIsNativeTag(tag)) {
  58. return true;
  59. }
  60. return false;
  61. };
  62. }
  63. if (isCustomElement) {
  64. const userIsCustomElement = compilerOptions.isCustomElement;
  65. compilerOptions.isCustomElement = (tag) => {
  66. if (isCustomElement(tag)) {
  67. return true;
  68. }
  69. if (userIsCustomElement && userIsCustomElement(tag)) {
  70. return true;
  71. }
  72. return false;
  73. };
  74. }
  75. compilerOptions.directiveTransforms = {
  76. ...compilerOptions.directiveTransforms,
  77. ...directiveTransforms,
  78. };
  79. if (!compilerOptions.nodeTransforms) {
  80. compilerOptions.nodeTransforms = [];
  81. }
  82. if (options.platform === 'h5' || options.platform === 'web') {
  83. templateOptions.transformAssetUrls = (0, uni_cli_shared_1.createUniVueTransformAssetUrls)((0, uni_cli_shared_1.isExternalUrl)(options.base) ? options.base : '');
  84. }
  85. else {
  86. // 替换内置的 transformAssetUrls 逻辑
  87. templateOptions.transformAssetUrls = {
  88. tags: {},
  89. };
  90. compilerOptions.nodeTransforms.push(...(0, uni_cli_shared_1.getBaseNodeTransforms)(options.base));
  91. }
  92. if (nodeTransforms) {
  93. compilerOptions.nodeTransforms.push(...nodeTransforms);
  94. }
  95. // const compatConfig = parseCompatConfigOnce(options.inputDir)
  96. // compilerOptions.compatConfig = extend(
  97. // compilerOptions.compatConfig || {},
  98. // compatConfig
  99. // )
  100. // App,MP 平台不支持使用静态节点
  101. compilerOptions.hoistStatic = false;
  102. compilerOptions.root = process.env.UNI_INPUT_DIR;
  103. const isX = process.env.UNI_APP_X === 'true';
  104. // app-nvue | app-uvue 需要启用 customElement 机制来内联 styles
  105. if (process.env.UNI_COMPILER === 'nvue' ||
  106. (isX && options.platform === 'app')) {
  107. vueOptions.customElement = true;
  108. if (process.env.UNI_RENDERER_NATIVE !== 'appService' || isX) {
  109. // nvue 需要使用自己的 compiler,来移除 scoped
  110. vueOptions.compiler = (0, utils_1.createNVueCompiler)();
  111. }
  112. }
  113. if (isX) {
  114. if (!vueOptions.script) {
  115. vueOptions.script = {
  116. babelParserPlugins: [],
  117. };
  118. }
  119. if (!vueOptions.script.babelParserPlugins) {
  120. vueOptions.script.babelParserPlugins = [];
  121. }
  122. if (!vueOptions.script.babelParserPlugins.includes('typescript')) {
  123. vueOptions.script.babelParserPlugins.push('typescript');
  124. }
  125. // decorators or decorators-legacy
  126. if (!vueOptions.script.babelParserPlugins.includes('decorators')) {
  127. vueOptions.script.babelParserPlugins.push('decorators');
  128. }
  129. }
  130. return vueOptions;
  131. }
  132. exports.initPluginVueOptions = initPluginVueOptions;
  133. function initPluginVueJsxOptions(options, { isCustomElement, }, jsxOptions) {
  134. const vueJsxOptions = (0, shared_1.isPlainObject)(options.vueJsxOptions)
  135. ? options.vueJsxOptions
  136. : (options.vueJsxOptions = {});
  137. if (!(0, shared_1.hasOwn)(vueJsxOptions, 'optimize')) {
  138. vueJsxOptions.optimize = true;
  139. }
  140. vueJsxOptions.isCustomElement = isCustomElement;
  141. if (!vueJsxOptions.babelPlugins) {
  142. vueJsxOptions.babelPlugins = [];
  143. }
  144. if ((0, shared_1.isArray)(jsxOptions.babelPlugins)) {
  145. vueJsxOptions.babelPlugins.push(...jsxOptions.babelPlugins);
  146. }
  147. return vueJsxOptions;
  148. }
  149. exports.initPluginVueJsxOptions = initPluginVueJsxOptions;
  150. function initPluginViteLegacyOptions(options) {
  151. const viteLegacyOptions = options.viteLegacyOptions || (options.viteLegacyOptions = {});
  152. return viteLegacyOptions;
  153. }
  154. exports.initPluginViteLegacyOptions = initPluginViteLegacyOptions;