290 lines
10 KiB
JavaScript
290 lines
10 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.showRunPrompt = exports.printStartupDuration = exports.cleanOptions = exports.initEnv = exports.addConfigFile = exports.PLATFORMS = void 0;
|
|||
|
const fs_1 = __importDefault(require("fs"));
|
|||
|
const os_1 = __importDefault(require("os"));
|
|||
|
const path_1 = __importDefault(require("path"));
|
|||
|
const picocolors_1 = __importDefault(require("picocolors"));
|
|||
|
const perf_hooks_1 = require("perf_hooks");
|
|||
|
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
|
|||
|
const nvue_1 = require("./nvue");
|
|||
|
const uvue_1 = require("./uvue");
|
|||
|
exports.PLATFORMS = [
|
|||
|
'app',
|
|||
|
'h5',
|
|||
|
'mp-alipay',
|
|||
|
'mp-baidu',
|
|||
|
'mp-qq',
|
|||
|
'mp-lark',
|
|||
|
'mp-toutiao',
|
|||
|
'mp-weixin',
|
|||
|
'quickapp-webview',
|
|||
|
'quickapp-webview-huawei',
|
|||
|
'quickapp-webview-union',
|
|||
|
];
|
|||
|
function resolveConfigFile() {
|
|||
|
const viteConfigJs = path_1.default.resolve(process.env.UNI_INPUT_DIR, 'vite.config.js');
|
|||
|
const viteConfigTs = path_1.default.resolve(process.env.UNI_INPUT_DIR, 'vite.config.ts');
|
|||
|
if (fs_1.default.existsSync(viteConfigTs)) {
|
|||
|
return viteConfigTs;
|
|||
|
}
|
|||
|
if (fs_1.default.existsSync(viteConfigJs)) {
|
|||
|
return viteConfigJs;
|
|||
|
}
|
|||
|
return path_1.default.resolve(process.env.UNI_CLI_CONTEXT, 'vite.config.js');
|
|||
|
}
|
|||
|
function addConfigFile(inlineConfig) {
|
|||
|
if ((0, uni_cli_shared_1.isInHBuilderX)()) {
|
|||
|
inlineConfig.configFile = resolveConfigFile();
|
|||
|
}
|
|||
|
return inlineConfig;
|
|||
|
}
|
|||
|
exports.addConfigFile = addConfigFile;
|
|||
|
let initialized = false;
|
|||
|
function initEnv(type, options) {
|
|||
|
if (initialized) {
|
|||
|
return;
|
|||
|
}
|
|||
|
initialized = true;
|
|||
|
if (options.platform === 'mp-360') {
|
|||
|
console.error(uni_cli_shared_1.M['mp.360.unsupported']);
|
|||
|
process.exit(0);
|
|||
|
}
|
|||
|
if (options.plugin) {
|
|||
|
process.env.UNI_MP_PLUGIN = 'true';
|
|||
|
}
|
|||
|
// TODO 需要识别 mode
|
|||
|
if (type === 'dev') {
|
|||
|
process.env.NODE_ENV = 'development';
|
|||
|
}
|
|||
|
else if (type === 'build') {
|
|||
|
if (options.watch) {
|
|||
|
process.env.NODE_ENV = 'development';
|
|||
|
}
|
|||
|
else {
|
|||
|
process.env.NODE_ENV = 'production';
|
|||
|
}
|
|||
|
}
|
|||
|
if (!options.mode) {
|
|||
|
options.mode = process.env.NODE_ENV;
|
|||
|
}
|
|||
|
// vite 会修改 NODE_ENV,存储在 UNI_NODE_ENV 中,稍后校正 NODE_ENV
|
|||
|
process.env.UNI_NODE_ENV = process.env.VITE_USER_NODE_ENV =
|
|||
|
process.env.NODE_ENV;
|
|||
|
process.env.UNI_CLI_CONTEXT = (0, uni_cli_shared_1.isInHBuilderX)()
|
|||
|
? path_1.default.resolve(process.env.UNI_HBUILDERX_PLUGINS, 'uniapp-cli-vite')
|
|||
|
: process.cwd();
|
|||
|
// TODO 待优化
|
|||
|
initUTSPlatform(options);
|
|||
|
if (options.platform === 'quickapp-webview-huawei' ||
|
|||
|
options.platform === 'quickapp-webview-union') {
|
|||
|
process.env.UNI_SUB_PLATFORM = options.platform;
|
|||
|
options.platform = 'quickapp-webview';
|
|||
|
}
|
|||
|
process.env.VITE_ROOT_DIR =
|
|||
|
process.env.VITE_ROOT_DIR || process.env.UNI_INPUT_DIR || process.cwd();
|
|||
|
process.env.UNI_INPUT_DIR =
|
|||
|
process.env.UNI_INPUT_DIR || path_1.default.resolve(process.cwd(), 'src');
|
|||
|
initCustomScripts(options);
|
|||
|
process.env.UNI_PLATFORM = options.platform;
|
|||
|
const hasOutputDir = !!process.env.UNI_OUTPUT_DIR;
|
|||
|
if (hasOutputDir) {
|
|||
|
;
|
|||
|
options.outDir = process.env.UNI_OUTPUT_DIR;
|
|||
|
}
|
|||
|
else {
|
|||
|
if (!options.outDir) {
|
|||
|
;
|
|||
|
options.outDir = path_1.default.resolve(process.cwd(), 'dist', process.env.NODE_ENV === 'production' ? 'build' : 'dev', (0, uni_cli_shared_1.getPlatformDir)());
|
|||
|
}
|
|||
|
process.env.UNI_OUTPUT_DIR = options.outDir;
|
|||
|
}
|
|||
|
// 兼容 HBuilderX 旧参数
|
|||
|
if (process.env.UNI_SUBPACKGE) {
|
|||
|
options.subpackage = process.env.UNI_SUBPACKGE;
|
|||
|
}
|
|||
|
if (options.subpackage) {
|
|||
|
process.env.UNI_SUBPACKAGE = options.subpackage;
|
|||
|
if (!hasOutputDir) {
|
|||
|
// 未指定,则自动补充
|
|||
|
process.env.UNI_OUTPUT_DIR = options.outDir =
|
|||
|
path_1.default.resolve(process.env.UNI_OUTPUT_DIR, options.subpackage);
|
|||
|
}
|
|||
|
}
|
|||
|
initAutomator(options);
|
|||
|
initDevtools(options);
|
|||
|
if (process.env.UNI_PLATFORM === 'app') {
|
|||
|
(0, nvue_1.initNVueEnv)();
|
|||
|
}
|
|||
|
if (process.env.NODE_ENV === 'development') {
|
|||
|
console.log(uni_cli_shared_1.M['dev.performance'] +
|
|||
|
(process.env.UNI_PLATFORM.startsWith('mp-')
|
|||
|
? uni_cli_shared_1.M['dev.performance.mp']
|
|||
|
: ''));
|
|||
|
}
|
|||
|
if (options.sourcemap &&
|
|||
|
process.env.NODE_ENV === 'production') {
|
|||
|
process.env.SOURCEMAP = 'true';
|
|||
|
}
|
|||
|
(0, uni_cli_shared_1.initModulePaths)();
|
|||
|
(0, uvue_1.initUVueEnv)();
|
|||
|
if (process.env.UNI_PLATFORM === 'app') {
|
|||
|
if (process.env.NODE_ENV === 'development') {
|
|||
|
if (
|
|||
|
// 仅windows
|
|||
|
uni_cli_shared_1.isWindows &&
|
|||
|
process.env.UNI_APP_X === 'true' &&
|
|||
|
process.env.UNI_UTS_PLATFORM === 'app-android') {
|
|||
|
console.log(uni_cli_shared_1.M['dev.exclusion']);
|
|||
|
}
|
|||
|
}
|
|||
|
const pkg = require('../../package.json');
|
|||
|
console.log(uni_cli_shared_1.M['app.compiler.version'].replace('{version}', pkg['uni-app']['compilerVersion'] +
|
|||
|
`(${process.env.UNI_APP_X === 'true' ? 'uni-app x' : 'vue3'})`));
|
|||
|
}
|
|||
|
console.log(uni_cli_shared_1.M['compiling']);
|
|||
|
}
|
|||
|
exports.initEnv = initEnv;
|
|||
|
function initUTSPlatform(options) {
|
|||
|
if (options.platform === 'app-android') {
|
|||
|
process.env.UNI_UTS_PLATFORM = 'app-android';
|
|||
|
options.platform = 'app';
|
|||
|
}
|
|||
|
else if (options.platform === 'app-ios') {
|
|||
|
process.env.UNI_UTS_PLATFORM = 'app-ios';
|
|||
|
options.platform = 'app';
|
|||
|
}
|
|||
|
else {
|
|||
|
// 运行时,可能传入了 UNI_APP_PLATFORM = 'android'|'ios'
|
|||
|
if (process.env.UNI_APP_PLATFORM === 'android') {
|
|||
|
process.env.UNI_UTS_PLATFORM = 'app-android';
|
|||
|
}
|
|||
|
if (process.env.UNI_APP_PLATFORM === 'ios') {
|
|||
|
process.env.UNI_UTS_PLATFORM = 'app-ios';
|
|||
|
}
|
|||
|
if (options.platform === 'app-plus') {
|
|||
|
options.platform = 'app';
|
|||
|
}
|
|||
|
}
|
|||
|
if (options.platform === 'h5') {
|
|||
|
process.env.UNI_UTS_PLATFORM = 'web';
|
|||
|
}
|
|||
|
// 非 app 平台,自动补充 UNI_UTS_PLATFORM
|
|||
|
// app 平台,必须主动传入
|
|||
|
if (options.platform !== 'app') {
|
|||
|
if (!process.env.UNI_UTS_PLATFORM) {
|
|||
|
process.env.UNI_UTS_PLATFORM = options.platform;
|
|||
|
}
|
|||
|
}
|
|||
|
process.env.UNI_UTS_TARGET_LANGUAGE = 'javascript';
|
|||
|
if (process.env.UNI_UTS_PLATFORM === 'app-android') {
|
|||
|
process.env.UNI_UTS_TARGET_LANGUAGE = 'kotlin';
|
|||
|
}
|
|||
|
else if (process.env.UNI_UTS_PLATFORM === 'app-ios') {
|
|||
|
process.env.UNI_UTS_TARGET_LANGUAGE = 'swift';
|
|||
|
}
|
|||
|
}
|
|||
|
function initDevtools({ devtools, devtoolsHost, devtoolsPort }) {
|
|||
|
if (!devtools) {
|
|||
|
return;
|
|||
|
}
|
|||
|
process.env.__VUE_PROD_DEVTOOLS__ = 'true';
|
|||
|
if (devtoolsHost) {
|
|||
|
process.env.__VUE_DEVTOOLS_HOST__ = devtoolsHost;
|
|||
|
}
|
|||
|
if (devtoolsPort) {
|
|||
|
process.env.__VUE_DEVTOOLS_PORT__ = devtoolsPort + '';
|
|||
|
}
|
|||
|
}
|
|||
|
function initAutomator({ autoHost, autoPort }) {
|
|||
|
// 发行分包,插件也不需要自动化测试
|
|||
|
if (!autoPort || process.env.UNI_SUBPACKAGE || process.env.UNI_MP_PLUGIN) {
|
|||
|
return;
|
|||
|
}
|
|||
|
process.env.UNI_AUTOMATOR_WS_ENDPOINT =
|
|||
|
'ws://' + (autoHost || resolveHostname()) + ':' + autoPort;
|
|||
|
}
|
|||
|
function resolveHostname() {
|
|||
|
const interfaces = os_1.default.networkInterfaces();
|
|||
|
const keys = Object.keys(interfaces);
|
|||
|
for (const key of keys) {
|
|||
|
const interfaceInfos = interfaces[key];
|
|||
|
if (!interfaceInfos) {
|
|||
|
continue;
|
|||
|
}
|
|||
|
for (const info of interfaceInfos) {
|
|||
|
if ((info.family === 'IPv4' ||
|
|||
|
/* Node >= v18 */ info.family === 4) &&
|
|||
|
!info.address.includes('127.0.0.1')) {
|
|||
|
return info.address;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return 'localhost';
|
|||
|
}
|
|||
|
function cleanOptions(options) {
|
|||
|
const ret = { ...options };
|
|||
|
delete ret['--'];
|
|||
|
delete ret.c;
|
|||
|
delete ret.config;
|
|||
|
delete ret.platform;
|
|||
|
delete ret.p;
|
|||
|
delete ret.ssr;
|
|||
|
delete ret.base;
|
|||
|
delete ret.debug;
|
|||
|
delete ret.d;
|
|||
|
delete ret.filter;
|
|||
|
delete ret.f;
|
|||
|
delete ret.logLevel;
|
|||
|
delete ret.l;
|
|||
|
delete ret.clearScreen;
|
|||
|
delete ret.m;
|
|||
|
delete ret.mode;
|
|||
|
delete ret.autoHost;
|
|||
|
delete ret.autoPort;
|
|||
|
return ret;
|
|||
|
}
|
|||
|
exports.cleanOptions = cleanOptions;
|
|||
|
function printStartupDuration(logger, whitespace = true) {
|
|||
|
// @ts-ignore
|
|||
|
if (global.__vite_start_time) {
|
|||
|
// @ts-ignore
|
|||
|
const startupDuration = perf_hooks_1.performance.now() - global.__vite_start_time;
|
|||
|
logger.info(`${whitespace ? `\n ` : ''}${picocolors_1.default.cyan(`ready in ${Math.ceil(startupDuration)}ms.`)}\n`);
|
|||
|
}
|
|||
|
}
|
|||
|
exports.printStartupDuration = printStartupDuration;
|
|||
|
function initCustomScripts(options) {
|
|||
|
const custom = (0, uni_cli_shared_1.parseScripts)(process.env.UNI_SCRIPT || options.platform, // process.env.UNI_SCRIPT 是 HBuilderX 传递的
|
|||
|
path_1.default.join(process.env.VITE_ROOT_DIR, 'package.json'));
|
|||
|
if (!custom) {
|
|||
|
return;
|
|||
|
}
|
|||
|
options.platform = custom.platform;
|
|||
|
process.env.UNI_CUSTOM_SCRIPT = custom.name;
|
|||
|
process.env.UNI_CUSTOM_DEFINE = JSON.stringify(custom.define);
|
|||
|
process.env.UNI_CUSTOM_CONTEXT = JSON.stringify(custom.context);
|
|||
|
}
|
|||
|
function showRunPrompt(platform) {
|
|||
|
if (!(0, uni_cli_shared_1.isInHBuilderX)()) {
|
|||
|
const devtools = getPlatformDevtools(getOriginalPlatform(platform));
|
|||
|
const outputDir = path_1.default.relative(process.env.UNI_CLI_CONTEXT, process.env.UNI_OUTPUT_DIR);
|
|||
|
(0, uni_cli_shared_1.output)('log', `${uni_cli_shared_1.M['prompt.run.message']
|
|||
|
.replace('{devtools}', uni_cli_shared_1.M[devtools])
|
|||
|
.replace('{outputDir}', picocolors_1.default.cyan(outputDir))}`);
|
|||
|
}
|
|||
|
}
|
|||
|
exports.showRunPrompt = showRunPrompt;
|
|||
|
function getOriginalPlatform(platform) {
|
|||
|
if (platform.startsWith('quickapp-webview') && process.env.UNI_SUB_PLATFORM) {
|
|||
|
return process.env.UNI_SUB_PLATFORM;
|
|||
|
}
|
|||
|
return platform;
|
|||
|
}
|
|||
|
function getPlatformDevtools(platform) {
|
|||
|
return `prompt.run.devtools.${platform}`;
|
|||
|
}
|