confusion.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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.uniConfusionPlugin = void 0;
  7. const path_1 = __importDefault(require("path"));
  8. const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
  9. function uniConfusionPlugin() {
  10. const inputDir = process.env.UNI_INPUT_DIR;
  11. const hasConfusion = process.env.NODE_ENV === 'production' && (0, uni_cli_shared_1.hasConfusionFile)(inputDir);
  12. return {
  13. name: 'uni:app-vue-confusion',
  14. enforce: 'post',
  15. apply: 'build',
  16. config() {
  17. if (!hasConfusion) {
  18. return;
  19. }
  20. return {
  21. build: {
  22. rollupOptions: {
  23. output: {
  24. format: process.env.UNI_APP_CODE_SPLITING ? 'amd' : 'cjs',
  25. manualChunks(id) {
  26. if ((0, uni_cli_shared_1.isConfusionFile)(path_1.default.relative(inputDir, id))) {
  27. return (0, uni_cli_shared_1.removeExt)(uni_cli_shared_1.APP_CONFUSION_FILENAME);
  28. }
  29. },
  30. },
  31. },
  32. },
  33. };
  34. },
  35. generateBundle(_, bundle) {
  36. if (!hasConfusion) {
  37. return;
  38. }
  39. const appConfusionChunk = bundle[uni_cli_shared_1.APP_CONFUSION_FILENAME];
  40. if (!appConfusionChunk) {
  41. return;
  42. }
  43. appConfusionChunk.code = wrapperAppConfusionCode(appConfusionChunk.code);
  44. const appServiceChunk = bundle[uni_cli_shared_1.APP_SERVICE_FILENAME];
  45. if (!appServiceChunk) {
  46. return;
  47. }
  48. appServiceChunk.code = wrapperAppServiceCode(appServiceChunk.code);
  49. },
  50. };
  51. }
  52. exports.uniConfusionPlugin = uniConfusionPlugin;
  53. function replaceRequireVueCode(code) {
  54. return code.replace(/require\(['"]vue['"]\)/gi, `$cjs_require$('vue')`);
  55. }
  56. function replaceRequireAppConfusionCode(code) {
  57. return code.replace(new RegExp(`require\\(['"].\\/${uni_cli_shared_1.APP_CONFUSION_FILENAME}['"]\\)`, 'gi'), `$cjs_require$('./${uni_cli_shared_1.APP_CONFUSION_FILENAME}')`);
  58. }
  59. function wrapperAppServiceCode(code) {
  60. return replaceRequireAppConfusionCode(replaceRequireVueCode(code));
  61. }
  62. function wrapperAppConfusionCode(code) {
  63. return `function $cjs_require$(name){if(name==='vue'){return Vue;}if(name==='./${uni_cli_shared_1.APP_CONFUSION_FILENAME}'){return $appConfusion$;}};const $appConfusion$ = {};(function(exports){${replaceRequireVueCode(code)}})($appConfusion$);
  64. `;
  65. }