index.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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.uniAppNVuePlugin = exports.initNVueDirectiveTransforms = exports.initNVueNodeTransforms = void 0;
  7. const path_1 = __importDefault(require("path"));
  8. const picocolors_1 = __importDefault(require("picocolors"));
  9. const uni_shared_1 = require("@dcloudio/uni-shared");
  10. const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
  11. const uni_nvue_styler_1 = require("@dcloudio/uni-nvue-styler");
  12. const utils_1 = require("../../utils");
  13. // import { transformRenderWhole } from './transforms/transformRenderWhole'
  14. // import { transformAppendAsTree } from './transforms/transformAppendAsTree'
  15. const transformVideo_1 = require("./transforms/transformVideo");
  16. const transformText_1 = require("./transforms/transformText");
  17. const configResolved_1 = require("../../plugin/configResolved");
  18. const utils_2 = require("../utils");
  19. const transformRootNode_1 = require("./transforms/transformRootNode");
  20. const vModel_1 = require("./transforms/vModel");
  21. const vShow_1 = require("./transforms/vShow");
  22. const transformAttrs_1 = require("./transforms/transformAttrs");
  23. const pagesJson_1 = require("../plugins/pagesJson");
  24. const uTags = {
  25. text: 'u-text',
  26. image: 'u-image',
  27. input: 'u-input',
  28. textarea: 'u-textarea',
  29. video: 'u-video',
  30. 'web-view': 'u-web-view',
  31. slider: 'u-slider',
  32. };
  33. function initNVueNodeTransforms() {
  34. // 优先级必须确保 renderWhole > appendAsTree
  35. return [
  36. transformRootNode_1.transformRootNode,
  37. (0, uni_cli_shared_1.createTransformTag)(uTags),
  38. transformAttrs_1.transformAttrs,
  39. transformText_1.transformText,
  40. transformVideo_1.transformVideo,
  41. uni_cli_shared_1.transformUTSComponent,
  42. // transformRenderWhole,
  43. // transformAppendAsTree,
  44. ];
  45. }
  46. exports.initNVueNodeTransforms = initNVueNodeTransforms;
  47. function initNVueDirectiveTransforms() {
  48. return {
  49. model: vModel_1.transformModel,
  50. show: vShow_1.transformShow,
  51. };
  52. }
  53. exports.initNVueDirectiveTransforms = initNVueDirectiveTransforms;
  54. function uniAppNVuePlugin({ appService, }) {
  55. const inputDir = process.env.UNI_INPUT_DIR;
  56. const mainPath = (0, uni_cli_shared_1.resolveMainPathOnce)(inputDir);
  57. return {
  58. name: 'uni:app-nvue',
  59. config() {
  60. return {
  61. css: {
  62. postcss: {
  63. plugins: (0, uni_cli_shared_1.initPostcssPlugin)({
  64. uniApp: uni_shared_1.defaultNVueRpx2Unit,
  65. autoprefixer: false,
  66. }),
  67. },
  68. },
  69. build: {
  70. lib: {
  71. name: 'AppService',
  72. // 必须使用 lib 模式,否则会生成 preload 等代码
  73. fileName: appService ? 'app-service' : 'app',
  74. entry: mainPath,
  75. formats: [appService ? 'iife' : 'es'],
  76. },
  77. outDir: appService ? process.env.UNI_OUTPUT_DIR : (0, utils_1.nvueOutDir)(),
  78. rollupOptions: {
  79. external: (0, utils_2.external)(appService),
  80. output: {
  81. entryFileNames(chunk) {
  82. if (chunk.name === 'main' && chunk.isEntry) {
  83. return appService ? uni_cli_shared_1.APP_SERVICE_FILENAME : 'app.js';
  84. }
  85. return chunk.name + '.js';
  86. },
  87. chunkFileNames: createChunkFileNames(inputDir),
  88. plugins: [(0, uni_cli_shared_1.dynamicImportPolyfill)(true)],
  89. globals: (0, utils_2.globals)(appService),
  90. },
  91. },
  92. },
  93. };
  94. },
  95. configResolved: (0, configResolved_1.createConfigResolved)({
  96. createCssPostPlugin(config) {
  97. return {
  98. name: 'vite:css-post',
  99. buildStart() {
  100. // 用于覆盖原始插件方法
  101. // noop
  102. },
  103. async transform(source, filename) {
  104. if (!uni_cli_shared_1.cssLangRE.test(filename) || uni_cli_shared_1.commonjsProxyRE.test(filename)) {
  105. return;
  106. }
  107. const nvuePages = pagesJson_1.nvuePagesCache.get(config);
  108. if (!nvuePages || !Object.keys(nvuePages).length) {
  109. // 当前项目没有 nvue 文件
  110. return { code: `export default {}`, map: { mappings: '' } };
  111. }
  112. const { code, messages } = await (0, uni_nvue_styler_1.parse)(source, {
  113. filename,
  114. logLevel: 'WARNING',
  115. });
  116. messages.forEach((message) => {
  117. if (message.type === 'warning') {
  118. config.logger.warn(picocolors_1.default.yellow(`[plugin:vite:nvue-css] ${message.text}`));
  119. let msg = '';
  120. if (message.line && message.column) {
  121. msg += `\n${(0, uni_cli_shared_1.generateCodeFrame)(source, {
  122. line: message.line,
  123. column: message.column,
  124. })}\n`;
  125. }
  126. msg += `${(0, uni_cli_shared_1.formatAtFilename)(filename)}`;
  127. config.logger.warn(msg);
  128. }
  129. });
  130. return { code: `export default ${code}`, map: { mappings: '' } };
  131. },
  132. generateBundle() {
  133. // 用于覆盖原始插件方法
  134. // noop
  135. },
  136. };
  137. },
  138. }),
  139. };
  140. }
  141. exports.uniAppNVuePlugin = uniAppNVuePlugin;
  142. function createChunkFileNames(inputDir) {
  143. return function chunkFileNames(chunk) {
  144. if (chunk.isDynamicEntry && chunk.facadeModuleId) {
  145. const { filename } = (0, uni_cli_shared_1.parseVueRequest)(chunk.facadeModuleId);
  146. if (filename.endsWith('.nvue')) {
  147. return ((0, uni_cli_shared_1.removeExt)((0, uni_cli_shared_1.normalizePath)(path_1.default.relative(inputDir, filename))) + '.js');
  148. }
  149. }
  150. return '[name].js';
  151. };
  152. }