index.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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.uniAppUVuePlugin = void 0;
  7. const fs_extra_1 = __importDefault(require("fs-extra"));
  8. const shared_1 = require("@vue/shared");
  9. const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
  10. const descriptorCache_1 = require("./descriptorCache");
  11. const utils_1 = require("../utils");
  12. const style_1 = require("./code/style");
  13. const main_1 = require("./sfc/main");
  14. function uniAppUVuePlugin() {
  15. const options = (0, descriptorCache_1.getResolvedOptions)();
  16. const appVue = (0, uni_cli_shared_1.resolveAppVue)(process.env.UNI_INPUT_DIR);
  17. function isAppVue(id) {
  18. return (0, uni_cli_shared_1.normalizePath)(id) === appVue;
  19. }
  20. return {
  21. name: 'uni:app-uvue',
  22. apply: 'build',
  23. async resolveId(id) {
  24. // serve sub-part requests (*?vue) as virtual modules
  25. if ((0, uni_cli_shared_1.parseVueRequest)(id).query.vue) {
  26. return id;
  27. }
  28. },
  29. load(id) {
  30. const { filename, query } = (0, uni_cli_shared_1.parseVueRequest)(id);
  31. // select corresponding block for sub-part virtual modules
  32. if (query.vue) {
  33. if (query.src) {
  34. return fs_extra_1.default.readFileSync(filename, 'utf-8');
  35. }
  36. const descriptor = (0, descriptorCache_1.getDescriptor)(filename, options);
  37. let block;
  38. if (query.type === 'style') {
  39. block = descriptor.styles[query.index];
  40. }
  41. else if (query.index != null) {
  42. block = descriptor.customBlocks[query.index];
  43. }
  44. if (block) {
  45. return {
  46. code: block.content,
  47. map: block.map,
  48. };
  49. }
  50. }
  51. },
  52. async transform(code, id) {
  53. const { filename, query } = (0, uni_cli_shared_1.parseVueRequest)(id);
  54. if (!(0, utils_1.isVue)(filename)) {
  55. return;
  56. }
  57. if (!query.vue) {
  58. // main request
  59. // if (process.env.UNI_APP_X_TSC === 'true') {
  60. // return {
  61. // code: uts,
  62. // map: sourceMap as SourceMapInput,
  63. // }
  64. // }
  65. return (0, main_1.transformMain)(code, filename, options, this, isAppVue(filename));
  66. }
  67. else {
  68. // sub block request
  69. const descriptor = query.src
  70. ? (0, descriptorCache_1.getSrcDescriptor)(filename)
  71. : (0, descriptorCache_1.getDescriptor)(filename, options);
  72. if (query.type === 'style') {
  73. return (0, style_1.transformStyle)(code, descriptor, Number(query.index), options, this, filename);
  74. }
  75. }
  76. },
  77. generateBundle(_, bundle) {
  78. // 遍历vue文件,填充style,尽量减少全局变量
  79. Object.keys(bundle).forEach((name) => {
  80. const file = bundle[name];
  81. if (file &&
  82. file.type === 'asset' &&
  83. (0, utils_1.isVue)(file.fileName) &&
  84. (0, shared_1.isString)(file.source)) {
  85. const fileName = (0, uni_cli_shared_1.normalizePath)(file.fileName);
  86. const classNameComment = `/*${(0, uni_cli_shared_1.genUTSClassName)(fileName, options.classNamePrefix)}Styles*/`;
  87. if (file.source.includes(classNameComment)) {
  88. const styleAssetName = fileName + '.style.uts';
  89. const styleAsset = bundle[styleAssetName];
  90. if (styleAsset &&
  91. styleAsset.type === 'asset' &&
  92. (0, shared_1.isString)(styleAsset.source)) {
  93. file.source = file.source.replace(classNameComment, styleAsset.source.replace('export ', ''));
  94. delete bundle[styleAssetName];
  95. }
  96. }
  97. }
  98. });
  99. },
  100. };
  101. }
  102. exports.uniAppUVuePlugin = uniAppUVuePlugin;