usingComponents.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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.dynamicImport = exports.uniUsingComponentsPlugin = void 0;
  7. const path_1 = __importDefault(require("path"));
  8. const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
  9. const entry_1 = require("./entry");
  10. function uniUsingComponentsPlugin(options = {}) {
  11. const normalizeComponentName = options.normalizeComponentName || ((name) => name);
  12. const parseAst = (source, id) => {
  13. return (0, uni_cli_shared_1.parseProgram)(source, id, {
  14. babelParserPlugins: options.babelParserPlugins,
  15. });
  16. };
  17. const inputDir = process.env.UNI_INPUT_DIR;
  18. let resolvedConfig;
  19. return {
  20. name: 'uni:mp-using-component',
  21. enforce: 'post',
  22. configResolved(config) {
  23. resolvedConfig = config;
  24. },
  25. async transform(source, id) {
  26. const { filename, query } = (0, uni_cli_shared_1.parseVueRequest)(id);
  27. if ((0, uni_cli_shared_1.isAppVue)(filename)) {
  28. return null;
  29. }
  30. const sourceMap = (0, uni_cli_shared_1.withSourcemap)(resolvedConfig);
  31. const dynamicImportOptions = {
  32. id,
  33. sourceMap,
  34. dynamicImport,
  35. };
  36. const resolve = async (source, importer, options) => {
  37. const id = (0, uni_cli_shared_1.resolveUTSModule)(source, importer || process.env.UNI_INPUT_DIR);
  38. if (id) {
  39. source = id;
  40. }
  41. return this.resolve(source, importer, options);
  42. };
  43. if (query.vue) {
  44. if (query.type === 'script') {
  45. // 需要主动监听
  46. this.addWatchFile(filename);
  47. const descriptor = await (0, uni_cli_shared_1.parseScriptDescriptor)(filename, parseAst(source, id), {
  48. resolve,
  49. isExternal: true,
  50. });
  51. (0, uni_cli_shared_1.updateMiniProgramComponentsByScriptFilename)(filename, inputDir, normalizeComponentName);
  52. return (0, uni_cli_shared_1.transformDynamicImports)(source, descriptor.imports, dynamicImportOptions);
  53. }
  54. else if (query.type === 'template') {
  55. // 需要主动监听
  56. this.addWatchFile(filename);
  57. const descriptor = await (0, uni_cli_shared_1.parseTemplateDescriptor)(filename, parseAst(source, id), {
  58. resolve,
  59. isExternal: true,
  60. });
  61. (0, uni_cli_shared_1.updateMiniProgramComponentsByTemplateFilename)(filename, inputDir, normalizeComponentName);
  62. return (0, uni_cli_shared_1.transformDynamicImports)(source, descriptor.imports, dynamicImportOptions);
  63. }
  64. return null;
  65. }
  66. if (!uni_cli_shared_1.EXTNAME_VUE.includes(path_1.default.extname(filename))) {
  67. return null;
  68. }
  69. const ast = parseAst(source, id);
  70. const descriptor = await (0, uni_cli_shared_1.parseMainDescriptor)(filename, ast, resolve);
  71. (0, uni_cli_shared_1.updateMiniProgramComponentsByMainFilename)(filename, inputDir, normalizeComponentName);
  72. return (0, uni_cli_shared_1.transformDynamicImports)(source, descriptor.imports, dynamicImportOptions);
  73. },
  74. };
  75. }
  76. exports.uniUsingComponentsPlugin = uniUsingComponentsPlugin;
  77. function dynamicImport(name, value) {
  78. // 开发者可能将页面作为组件来引用
  79. if ((0, uni_cli_shared_1.isMiniProgramPageFile)(value, process.env.UNI_INPUT_DIR)) {
  80. return `const ${name} = ()=>import('${(0, entry_1.virtualPagePath)(value)}')`;
  81. }
  82. return `const ${name} = ()=>import('${(0, entry_1.virtualComponentPath)(value)}')`;
  83. }
  84. exports.dynamicImport = dynamicImport;