140 lines
6.5 KiB
JavaScript
140 lines
6.5 KiB
JavaScript
"use strict";
|
||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||
};
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.uniAppCssPlugin = exports.uniAppCssPrePlugin = void 0;
|
||
const path_1 = __importDefault(require("path"));
|
||
const picocolors_1 = __importDefault(require("picocolors"));
|
||
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
|
||
const uni_nvue_styler_1 = require("@dcloudio/uni-nvue-styler");
|
||
const descriptorCache_1 = require("./uvue/descriptorCache");
|
||
const utils_1 = require("./utils");
|
||
function uniAppCssPrePlugin() {
|
||
const name = 'uni:app-uvue-css-pre';
|
||
const descriptorOptions = {
|
||
...(0, descriptorCache_1.getResolvedOptions)(),
|
||
sourceMap: false,
|
||
};
|
||
const mainPath = (0, uni_cli_shared_1.resolveMainPathOnce)(process.env.UNI_INPUT_DIR);
|
||
return {
|
||
name,
|
||
// 需要提前,因为unocss会在configResolved读取vite:css-post插件
|
||
// 所以需要在它之前做替换
|
||
enforce: 'pre',
|
||
apply: 'build',
|
||
configResolved(config) {
|
||
(0, uni_cli_shared_1.removePlugins)(['vite:css', 'vite:css-post'], config);
|
||
const uvueCssPostPlugin = (0, uni_cli_shared_1.cssPostPlugin)(config, {
|
||
isJsCode: true,
|
||
platform: process.env.UNI_PLATFORM,
|
||
includeComponentCss: false,
|
||
chunkCssFilename(id) {
|
||
const { filename } = (0, uni_cli_shared_1.parseVueRequest)(id);
|
||
if (filename === mainPath) {
|
||
// 合并到App
|
||
return `App.uvue.style.uts`;
|
||
}
|
||
if ((0, utils_1.isVue)(filename)) {
|
||
return (0, uni_cli_shared_1.normalizeNodeModules)((path_1.default.isAbsolute(filename)
|
||
? path_1.default.relative(process.env.UNI_INPUT_DIR, filename)
|
||
: filename) + '.style.uts');
|
||
}
|
||
},
|
||
async chunkCssCode(filename, cssCode) {
|
||
cssCode = (0, uni_cli_shared_1.parseAssets)(config, cssCode);
|
||
const { code, messages } = await (0, uni_nvue_styler_1.parse)(cssCode, {
|
||
filename,
|
||
logLevel: 'ERROR',
|
||
mapOf: 'utsMapOf',
|
||
chunk: 100,
|
||
type: 'uvue',
|
||
platform: process.env.UNI_UTS_PLATFORM,
|
||
trim: true,
|
||
});
|
||
messages.forEach((message) => {
|
||
if (message.type === 'error') {
|
||
let msg = `[plugin:uni:app-uvue-css] ${message.text}`;
|
||
if (message.line && message.column) {
|
||
msg += `\n${(0, uni_cli_shared_1.generateCodeFrame)(cssCode, {
|
||
line: message.line,
|
||
column: message.column,
|
||
}).replace(/\t/g, ' ')}`;
|
||
}
|
||
msg += `\n${(0, uni_cli_shared_1.formatAtFilename)(filename)}`;
|
||
config.logger.error(picocolors_1.default.red(msg));
|
||
}
|
||
});
|
||
const fileName = filename.replace('.style.uts', '');
|
||
const className = process.env.UNI_COMPILE_TARGET === 'ext-api'
|
||
? // components/map/map.vue => UniMap
|
||
(0, uni_cli_shared_1.genUTSClassName)(path_1.default.basename(fileName), descriptorOptions.classNamePrefix)
|
||
: (0, uni_cli_shared_1.genUTSClassName)(fileName, descriptorOptions.classNamePrefix);
|
||
return `export const ${className}Styles = ${code}`;
|
||
},
|
||
});
|
||
// 增加 css plugins
|
||
// TODO 加密插件
|
||
(0, uni_cli_shared_1.insertBeforePlugin)((0, uni_cli_shared_1.cssPlugin)(config, {
|
||
isAndroidX: true,
|
||
getDescriptor: (filename) => {
|
||
return (0, descriptorCache_1.getDescriptor)(filename, descriptorOptions, false);
|
||
},
|
||
}), name, config);
|
||
const plugins = config.plugins;
|
||
const index = plugins.findIndex((p) => p.name === 'uni:app-uvue');
|
||
plugins.splice(index, 0, uvueCssPostPlugin);
|
||
},
|
||
};
|
||
}
|
||
exports.uniAppCssPrePlugin = uniAppCssPrePlugin;
|
||
function uniAppCssPlugin() {
|
||
let resolvedConfig;
|
||
return {
|
||
name: 'uni:app-uvue-css',
|
||
apply: 'build',
|
||
configResolved(config) {
|
||
resolvedConfig = config;
|
||
},
|
||
async transform(source, filename) {
|
||
if (!uni_cli_shared_1.cssLangRE.test(filename) || uni_cli_shared_1.commonjsProxyRE.test(filename)) {
|
||
return;
|
||
}
|
||
if (filename.endsWith('__uno.css')) {
|
||
return;
|
||
}
|
||
if (source.includes('#endif')) {
|
||
source = (0, uni_cli_shared_1.preUVueCss)(source);
|
||
}
|
||
source = (0, uni_cli_shared_1.parseAssets)(resolvedConfig, source);
|
||
// 仅做校验使用
|
||
const { messages } = await (0, uni_nvue_styler_1.parse)(source, {
|
||
filename,
|
||
logLevel: 'WARNING',
|
||
map: true,
|
||
ts: true,
|
||
noCode: true,
|
||
type: 'uvue',
|
||
platform: process.env.UNI_UTS_PLATFORM,
|
||
});
|
||
messages.forEach((message) => {
|
||
if (message.type === 'warning') {
|
||
// 拆分成多行,第一行输出信息(有颜色),后续输出错误代码+文件行号
|
||
resolvedConfig.logger.warn(picocolors_1.default.yellow(`[plugin:uni:app-uvue-css] ${message.text}`));
|
||
let msg = '';
|
||
if (message.line && message.column) {
|
||
msg += `\n${(0, uni_cli_shared_1.generateCodeFrame)(source, {
|
||
line: message.line,
|
||
column: message.column,
|
||
}).replace(/\t/g, ' ')}\n`;
|
||
}
|
||
msg += `${(0, uni_cli_shared_1.formatAtFilename)(filename)}`;
|
||
resolvedConfig.logger.warn(msg);
|
||
}
|
||
});
|
||
return { code: source };
|
||
},
|
||
};
|
||
}
|
||
exports.uniAppCssPlugin = uniAppCssPlugin;
|