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}`;
|
||
}
|