css.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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.uniAppCssPlugin = void 0;
  7. const path_1 = __importDefault(require("path"));
  8. const picocolors_1 = __importDefault(require("picocolors"));
  9. const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
  10. const uni_nvue_styler_1 = require("@dcloudio/uni-nvue-styler");
  11. const descriptorCache_1 = require("./uvue/descriptorCache");
  12. const utils_1 = require("./utils");
  13. function uniAppCssPlugin() {
  14. const mainUTS = (0, uni_cli_shared_1.resolveMainPathOnce)(process.env.UNI_INPUT_DIR);
  15. let resolvedConfig;
  16. const name = 'uni:app-uvue-css';
  17. const descriptorOptions = {
  18. ...(0, descriptorCache_1.getResolvedOptions)(),
  19. sourceMap: false,
  20. };
  21. return {
  22. name,
  23. apply: 'build',
  24. configResolved(config) {
  25. resolvedConfig = config;
  26. const uvueCssPostPlugin = (0, uni_cli_shared_1.cssPostPlugin)(config, {
  27. isJsCode: true,
  28. platform: process.env.UNI_PLATFORM,
  29. includeComponentCss: false,
  30. chunkCssFilename(id) {
  31. if (id === mainUTS) {
  32. return 'App.style.uts';
  33. }
  34. const { filename } = (0, uni_cli_shared_1.parseVueRequest)(id);
  35. if ((0, utils_1.isVue)(filename)) {
  36. return (0, uni_cli_shared_1.normalizeNodeModules)(path_1.default.relative(process.env.UNI_INPUT_DIR, filename) + '.style.uts');
  37. }
  38. },
  39. async chunkCssCode(filename, cssCode) {
  40. cssCode = (0, uni_cli_shared_1.parseAssets)(resolvedConfig, cssCode);
  41. const { code, messages } = await (0, uni_nvue_styler_1.parse)(cssCode, {
  42. filename,
  43. logLevel: 'ERROR',
  44. mapOf: 'utsMapOf',
  45. chunk: 100,
  46. type: 'uvue',
  47. platform: process.env.UNI_UTS_PLATFORM,
  48. trim: true,
  49. });
  50. messages.forEach((message) => {
  51. if (message.type === 'error') {
  52. let msg = `[plugin:uni:app-uvue-css] ${message.text}`;
  53. if (message.line && message.column) {
  54. msg += `\n${(0, uni_cli_shared_1.generateCodeFrame)(cssCode, {
  55. line: message.line,
  56. column: message.column,
  57. }).replace(/\t/g, ' ')}`;
  58. }
  59. msg += `\n${(0, uni_cli_shared_1.formatAtFilename)(filename)}`;
  60. resolvedConfig.logger.error(picocolors_1.default.red(msg));
  61. }
  62. });
  63. return `export const ${(0, uni_cli_shared_1.genUTSClassName)(filename.replace('.style.uts', ''))}Styles = ${code}`;
  64. },
  65. });
  66. // 增加 css plugins
  67. (0, uni_cli_shared_1.insertBeforePlugin)((0, uni_cli_shared_1.cssPlugin)(config, {
  68. isAndroidX: true,
  69. getDescriptor: (filename) => {
  70. return (0, descriptorCache_1.getDescriptor)(filename, descriptorOptions, false);
  71. },
  72. }), name, config);
  73. const plugins = config.plugins;
  74. const index = plugins.findIndex((p) => p.name === 'uni:app-uvue');
  75. plugins.splice(index, 0, uvueCssPostPlugin);
  76. },
  77. async transform(source, filename) {
  78. if (!uni_cli_shared_1.cssLangRE.test(filename) || uni_cli_shared_1.commonjsProxyRE.test(filename)) {
  79. return;
  80. }
  81. if (source.includes('#endif')) {
  82. source = (0, uni_cli_shared_1.preUVueCss)(source);
  83. }
  84. source = (0, uni_cli_shared_1.parseAssets)(resolvedConfig, source);
  85. // 仅做校验使用
  86. const { messages } = await (0, uni_nvue_styler_1.parse)(source, {
  87. filename,
  88. logLevel: 'WARNING',
  89. map: true,
  90. ts: true,
  91. noCode: true,
  92. type: 'uvue',
  93. platform: process.env.UNI_UTS_PLATFORM,
  94. });
  95. messages.forEach((message) => {
  96. if (message.type === 'warning') {
  97. // 拆分成多行,第一行输出信息(有颜色),后续输出错误代码+文件行号
  98. resolvedConfig.logger.warn(picocolors_1.default.yellow(`[plugin:uni:app-uvue-css] ${message.text}`));
  99. let msg = '';
  100. if (message.line && message.column) {
  101. msg += `\n${(0, uni_cli_shared_1.generateCodeFrame)(source, {
  102. line: message.line,
  103. column: message.column,
  104. }).replace(/\t/g, ' ')}\n`;
  105. }
  106. msg += `${(0, uni_cli_shared_1.formatAtFilename)(filename)}`;
  107. resolvedConfig.logger.warn(msg);
  108. }
  109. });
  110. return { code: source };
  111. },
  112. };
  113. }
  114. exports.uniAppCssPlugin = uniAppCssPlugin;