H5-contact/node_modules/@dcloudio/uni-cli-shared/dist/hbx/alias.js

232 lines
10 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatInstallHBuilderXPluginTips = exports.moduleAliasFormatter = exports.installHBuilderXPlugin = exports.initModuleAlias = void 0;
// 注意该文件尽可能少依赖其他文件否则可能会导致还没有alias的时候就加载了目标模块
const path_1 = __importDefault(require("path"));
const module_alias_1 = __importDefault(require("module-alias"));
const utils_1 = require("./utils");
const hbxPlugins = {
typescript: 'compile-typescript/node_modules/typescript',
less: 'compile-less/node_modules/less',
sass: 'compile-dart-sass/node_modules/sass',
stylus: 'compile-stylus/node_modules/stylus',
pug: 'compile-pug-cli/node_modules/pug',
};
function isWebOrMpPlatform(platform) {
return platform === 'h5' || platform === 'web' || platform?.startsWith('mp-');
}
function initModuleAlias() {
const libDir = path_1.default.resolve(__dirname, '../../lib');
const compilerSfcPath = path_1.default.resolve(libDir, '@vue/compiler-sfc');
const serverRendererPath = require.resolve('@vue/server-renderer');
if (process.env.UNI_OUTPUT_DIR) {
const baseOutDir = path_1.default.basename(process.env.UNI_OUTPUT_DIR);
process.env.UNI_APP_X_CACHE_DIR =
process.env.UNI_APP_X_CACHE_DIR ||
path_1.default.resolve(process.env.UNI_OUTPUT_DIR, '../cache/.' + baseOutDir);
}
// 对路径进行兼容
if (!process.env.UNI_APP_X_DOM2_CPP_DIR &&
process.env.UNI_APP_HARMONY_DOM2_CPP_DIR) {
process.env.UNI_APP_X_DOM2_CPP_DIR =
process.env.UNI_APP_HARMONY_DOM2_CPP_DIR;
}
// alias 初始化可能早于 CLI 环境初始化,这里仅依据外部预置的平台环境变量判断。
// 如果是 web 和小程序,目前强制非蒸汽。
const utsPlatform = process.env.UNI_UTS_PLATFORM;
const uniPlatform = process.env.UNI_PLATFORM;
if (isWebOrMpPlatform(utsPlatform) || isWebOrMpPlatform(uniPlatform)) {
delete process.env.UNI_APP_X_DOM2;
delete process.env.UNI_APP_X_DOM2_DYNAMIC;
}
if (process.env.UNI_APP_X_DOM2 === 'true') {
if (process.env.UNI_OUTPUT_DIR &&
(process.env.UNI_PLATFORM === 'app' ||
process.env.UNI_PLATFORM === 'app-plus' ||
process.env.UNI_PLATFORM === 'app-harmony')) {
if (!process.env.UNI_APP_X_DOM2_CPP_DIR) {
let baseDir = '';
const isAndroid = process.env.UNI_APP_PLATFORM === 'android';
const isIOS = process.env.UNI_APP_PLATFORM === 'ios';
if (process.env.NODE_ENV !== 'development' && (isAndroid || isIOS)) {
baseDir = path_1.default.resolve(process.env.UNI_OUTPUT_DIR, '.uniappx', isAndroid ? 'android' : 'ios');
}
else {
baseDir =
process.env.UNI_PLATFORM === 'app-harmony'
? process.env.UNI_OUTPUT_DIR
: process.env.UNI_APP_X_CACHE_DIR || process.env.UNI_OUTPUT_DIR;
}
process.env.UNI_APP_X_DOM2_CPP_DIR = path_1.default.resolve(baseDir, 'cpp');
process.env.UNI_APP_X_DOM2_SO_DIR = path_1.default.resolve(baseDir, 'so');
}
if (!process.env.UNI_APP_X_DOM2_KT_DIR) {
if (process.env.NODE_ENV !== 'development') {
process.env.UNI_APP_X_DOM2_KT_DIR = path_1.default.resolve(process.env.UNI_OUTPUT_DIR, '.uniappx/android', 'src');
}
else {
process.env.UNI_APP_X_DOM2_KT_DIR = path_1.default.resolve(process.env.UNI_APP_X_CACHE_DIR ||
path_1.default.resolve(process.env.UNI_OUTPUT_DIR, '../.cache'), 'src');
}
}
}
if (process.env.UNI_APP_PLATFORM ||
process.env.UNI_PLATFORM === 'app-harmony') {
if (!process.env.UNI_APP_X_VAPOR_RENDER_TARGET) {
// 默认 app 平台使用 bytecode 目标
process.env.UNI_APP_X_VAPOR_RENDER_TARGET = 'bytecode';
}
if (process.env.UNI_APP_X_VAPOR_RENDER_TARGET?.includes('bytecode')) {
process.env.UNI_APP_X_DOM2_DYNAMIC = 'true';
}
// 如果是 ext-api 目标,强制使用 nativecode 目标
if (process.env.UNI_COMPILE_TARGET === 'ext-api') {
delete process.env.UNI_APP_X_DOM2_DYNAMIC;
}
}
}
if (process.env.UNI_APP_X_DOM2 === 'true') {
const vuePkgs = [
'@vue/compiler-core',
'@vue/compiler-dom',
'@vue/compiler-sfc',
'@vue/compiler-vapor',
'@vue/shared',
];
vuePkgs.forEach((pkg) => {
module_alias_1.default.addAlias(pkg, path_1.default.resolve(libDir, 'dom2', 'app', '@vue', pkg.split('/').pop()));
});
module_alias_1.default.addAlias('@vitejs/plugin-vue', path_1.default.resolve(libDir, 'dom2', 'app', '@vitejs', 'plugin-vue'));
module_alias_1.default.addAlias('@dcloudio/compiler-vapor-dom2', path_1.default.resolve(libDir, 'dom2', 'app', '@vue', 'compiler-vapor-dom2'));
}
else {
module_alias_1.default.addAliases({
'@vue/shared': require.resolve('@vue/shared'),
'@vue/shared/dist/shared.esm-bundler.js': require.resolve('@vue/shared/dist/shared.esm-bundler.js'),
'@vue/compiler-core': path_1.default.resolve(libDir, '@vue/compiler-core'),
'@vue/compiler-dom': require.resolve('@vue/compiler-dom'),
'@vue/compiler-sfc': compilerSfcPath,
'@vue/server-renderer': serverRendererPath,
'vue/compiler-sfc': compilerSfcPath,
'vue/server-renderer': serverRendererPath,
});
}
if (process.env.VITEST) {
module_alias_1.default.addAliases({
vue: '@dcloudio/uni-h5-vue',
'vue/package.json': '@dcloudio/uni-h5-vue/package.json',
});
}
if ((0, utils_1.isInHBuilderX)()) {
// 又是为了复用 HBuilderX 的插件逻辑,硬编码映射
Object.keys(hbxPlugins).forEach((lang) => {
const realPath = path_1.default.resolve(process.env.UNI_HBUILDERX_PLUGINS, hbxPlugins[lang]);
module_alias_1.default.addAlias(lang,
// @ts-expect-error
() => {
try {
require.resolve(realPath);
}
catch (e) {
const msg = exports.moduleAliasFormatter.format(`Preprocessor dependency "${lang}" not found. Did you install it?`);
console.error(msg);
process.exit(0);
}
return realPath;
});
});
// web 平台用了 vite 内置 css 插件该插件会加载预编译器如scss、less等需要转向到 HBuilderX 的对应编译器插件
if (process.env.UNI_PLATFORM === 'h5' ||
process.env.UNI_PLATFORM === 'web') {
// https://github.com/vitejs/vite/blob/main/packages/vite/src/node/packages.ts#L92
// 拦截预编译器
const join = path_1.default.join;
path_1.default.join = function (...paths) {
if (paths.length === 4) {
// path.join(basedir, 'node_modules', pkgName, 'package.json')
// const basedir = paths[0]
const nodeModules = paths[1]; // = node_modules
const pkgName = paths[2];
const packageJson = paths[3]; // = package.json
if (nodeModules === 'node_modules' &&
packageJson === 'package.json' &&
hbxPlugins[pkgName]) {
return path_1.default.resolve(process.env.UNI_HBUILDERX_PLUGINS, hbxPlugins[pkgName], packageJson);
}
}
return join(...paths);
};
// https://github.com/vitejs/vite/blob/892916d040a035edde1add93c192e0b0c5c9dd86/packages/vite/src/node/plugins/css.ts#L1481
// const oldSync = resovle.sync
// resovle.sync = (id: string, opts?: SyncOpts) => {
// if ((hbxPlugins as any)[id]) {
// return path.resolve(
// process.env.UNI_HBUILDERX_PLUGINS,
// hbxPlugins[id as keyof typeof hbxPlugins]
// )
// }
// return oldSync(id, opts)
// }
}
}
}
exports.initModuleAlias = initModuleAlias;
function supportAutoInstallPlugin() {
return !!process.env.HX_Version;
}
function installHBuilderXPlugin(plugin) {
if (!supportAutoInstallPlugin()) {
return;
}
return console.error(`%HXRunUniAPPPluginName%${plugin}%HXRunUniAPPPluginName%`);
}
exports.installHBuilderXPlugin = installHBuilderXPlugin;
const installPreprocessorTips = {};
exports.moduleAliasFormatter = {
test(msg) {
return msg.includes('Preprocessor dependency');
},
format(msg) {
let lang = '';
let preprocessor = '';
if (msg.includes(`"pug"`)) {
lang = 'pug';
preprocessor = 'compile-pug-cli';
}
else if (msg.includes(`"sass"`)) {
lang = 'sass';
preprocessor = 'compile-dart-sass';
}
else if (msg.includes(`"less"`)) {
lang = 'less';
preprocessor = 'compile-less';
}
else if (msg.includes('"stylus"')) {
lang = 'stylus';
preprocessor = 'compile-stylus';
}
else if (msg.includes('"typescript"')) {
lang = 'typescript';
preprocessor = 'compile-typescript';
}
if (lang) {
// 仅提醒一次
if (installPreprocessorTips[lang]) {
return '';
}
installPreprocessorTips[lang] = true;
installHBuilderXPlugin(preprocessor);
return formatInstallHBuilderXPluginTips(lang, preprocessor);
}
return msg;
},
};
function formatInstallHBuilderXPluginTips(lang, preprocessor) {
return `预编译器错误:代码使用了${lang}语言,但未安装相应的编译器插件,${supportAutoInstallPlugin() ? '正在从' : '请前往'}插件市场安装该插件:
https://ext.dcloud.net.cn/plugin?name=${preprocessor}`;
}
exports.formatInstallHBuilderXPluginTips = formatInstallHBuilderXPluginTips;