plugin.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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.initExtraPlugins = exports.initPluginUniOptions = void 0;
  7. const path_1 = __importDefault(require("path"));
  8. const shared_1 = require("@vue/shared");
  9. const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
  10. function initPluginUniOptions(UniVitePlugins) {
  11. const assets = [];
  12. const targets = [];
  13. const transformEvent = Object.create(null);
  14. const compilerOptions = {};
  15. const jsxOptions = {};
  16. const styleOptions = {};
  17. let compiler;
  18. UniVitePlugins.forEach((plugin) => {
  19. const { compiler: pluginTemplateCompiler, copyOptions: pluginCopyOptions, compilerOptions: pluginCompilerOptions, jsxOptions: pluginJsxOptions, styleOptions: pluginStyleOpitons, } = plugin.uni || {};
  20. if (pluginTemplateCompiler) {
  21. compiler = pluginTemplateCompiler;
  22. }
  23. if (pluginCompilerOptions) {
  24. (0, shared_1.extend)(compilerOptions, pluginCompilerOptions);
  25. }
  26. if (pluginJsxOptions) {
  27. (0, shared_1.extend)(jsxOptions, pluginJsxOptions);
  28. }
  29. if (pluginStyleOpitons) {
  30. (0, shared_1.extend)(styleOptions, pluginStyleOpitons);
  31. }
  32. if (pluginCopyOptions) {
  33. let copyOptions = pluginCopyOptions;
  34. if ((0, shared_1.isFunction)(pluginCopyOptions)) {
  35. copyOptions = pluginCopyOptions();
  36. }
  37. if (copyOptions.assets) {
  38. assets.push(...copyOptions.assets);
  39. }
  40. if (copyOptions.targets) {
  41. targets.push(...copyOptions.targets);
  42. }
  43. }
  44. });
  45. return {
  46. compiler,
  47. copyOptions: {
  48. assets,
  49. targets,
  50. },
  51. transformEvent,
  52. compilerOptions,
  53. jsxOptions,
  54. styleOptions,
  55. };
  56. }
  57. exports.initPluginUniOptions = initPluginUniOptions;
  58. function initExtraPlugins(cliRoot, platform, options) {
  59. return initPlugins(cliRoot, resolvePlugins(cliRoot, platform, options.uvue), options);
  60. }
  61. exports.initExtraPlugins = initExtraPlugins;
  62. function initPlugin(cliRoot, { id, config: { main } }, options) {
  63. let plugin = require(require.resolve(path_1.default.join(id, main || '/lib/uni.plugin.js'), { paths: [cliRoot] }));
  64. plugin = plugin.default || plugin;
  65. if ((0, shared_1.isFunction)(plugin)) {
  66. plugin = plugin(options);
  67. }
  68. return plugin;
  69. }
  70. function initPlugins(cliRoot, plugins, options) {
  71. return plugins
  72. .map((plugin) => initPlugin(cliRoot, plugin, options))
  73. .flat()
  74. .filter(Boolean)
  75. .map((plugin) => {
  76. if ((0, shared_1.isFunction)(plugin)) {
  77. return plugin(options);
  78. }
  79. return plugin;
  80. })
  81. .flat();
  82. }
  83. function resolvePlugins(cliRoot, platform, uvue = false) {
  84. const pkg = require(path_1.default.join(cliRoot, 'package.json'));
  85. return Object.keys(pkg.devDependencies || {})
  86. .concat(Object.keys(pkg.dependencies || {}))
  87. .map((id) => {
  88. try {
  89. const pluginPkg = require(require.resolve(id + '/package.json', {
  90. paths: [cliRoot],
  91. }));
  92. const config = pluginPkg['uni-app'];
  93. if (!config || !config.name) {
  94. return;
  95. }
  96. const { apply } = config;
  97. if ((0, shared_1.isArray)(apply)) {
  98. // 注册所有平台
  99. apply.forEach((p) => (0, uni_cli_shared_1.registerPlatform)(p));
  100. if (!apply.includes(platform)) {
  101. return;
  102. }
  103. }
  104. else if ((0, shared_1.isString)(apply)) {
  105. if (!new RegExp(apply).test(platform)) {
  106. return;
  107. }
  108. }
  109. // 插件必须支持 uvue
  110. if (uvue && !config.uvue) {
  111. return;
  112. }
  113. return {
  114. id,
  115. name: config.name,
  116. config,
  117. };
  118. }
  119. catch (e) { }
  120. })
  121. .filter(Boolean);
  122. }