|
|
"use strict";
|
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
|
};
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
exports.runBuild = exports.runDev = void 0;
|
|
|
const fs_1 = __importDefault(require("fs"));
|
|
|
const vite_1 = __importDefault(require("unplugin-auto-import/vite"));
|
|
|
const plugin_vue_jsx_1 = __importDefault(require("@vitejs/plugin-vue-jsx"));
|
|
|
const plugin_legacy_1 = __importDefault(require("@vitejs/plugin-legacy"));
|
|
|
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
|
|
|
const config_1 = require("./config");
|
|
|
const configResolved_1 = require("./configResolved");
|
|
|
const copy_1 = require("./plugins/copy");
|
|
|
const move_1 = require("./plugins/move");
|
|
|
const utils_1 = require("./utils");
|
|
|
const vue_1 = require("./vue");
|
|
|
const utils_2 = require("./cli/utils");
|
|
|
const plugins_1 = require("./uvue/plugins");
|
|
|
const path_1 = __importDefault(require("path"));
|
|
|
var action_1 = require("./cli/action");
|
|
|
Object.defineProperty(exports, "runDev", { enumerable: true, get: function () { return action_1.runDev; } });
|
|
|
Object.defineProperty(exports, "runBuild", { enumerable: true, get: function () { return action_1.runBuild; } });
|
|
|
let isFirst = true;
|
|
|
function uniPlugin(rawOptions = {}) {
|
|
|
// 重写readFileSync,拦截.scss 等文件读取,实现条件编译,
|
|
|
(0, uni_cli_shared_1.rewriteScssReadFileSync)();
|
|
|
if ((0, uni_cli_shared_1.isInHBuilderX)()) {
|
|
|
(0, uni_cli_shared_1.rewriteExistsSyncHasRootFile)();
|
|
|
}
|
|
|
// 三方插件(如vitest)可能提供了自己的入口命令,需要补充 env 初始化逻辑
|
|
|
(0, utils_2.initEnv)('unknown', { platform: process.env.UNI_PLATFORM || 'h5' });
|
|
|
const options = {
|
|
|
...rawOptions,
|
|
|
base: '/',
|
|
|
assetsDir: 'assets',
|
|
|
inputDir: '',
|
|
|
outputDir: '',
|
|
|
command: 'serve',
|
|
|
platform: 'h5',
|
|
|
};
|
|
|
options.platform = process.env.UNI_PLATFORM || 'h5';
|
|
|
options.inputDir = process.env.UNI_INPUT_DIR;
|
|
|
const plugins = process.env.UNI_APP_X === 'true' &&
|
|
|
process.env.UNI_UTS_PLATFORM === 'app-android'
|
|
|
? createUVueAndroidPlugins(options)
|
|
|
: createPlugins(options);
|
|
|
// x 提供 auto import(非android、android自行处理)
|
|
|
if (process.env.UNI_APP_X === 'true' &&
|
|
|
process.env.UNI_UTS_PLATFORM !== 'app-android') {
|
|
|
plugins.unshift((0, vite_1.default)((0, uni_cli_shared_1.initAutoImportOptions)(process.env.UNI_UTS_PLATFORM, options.autoImportOptions || {})));
|
|
|
}
|
|
|
plugins.unshift((0, uni_cli_shared_1.uniJsonPlugin)());
|
|
|
return plugins;
|
|
|
}
|
|
|
exports.default = uniPlugin;
|
|
|
function createPlugins(options) {
|
|
|
const plugins = [];
|
|
|
// 框架 ext-api 不需要 inject 本地 ext-api
|
|
|
if (process.env.UNI_COMPILE_TARGET !== 'ext-api') {
|
|
|
// uni x 需要插入到指定位置,此插件执行太早,又会引发 vue 文件的不支持,该插件是解析ast的,所以必须是合法的js或ts代码
|
|
|
if (process.env.UNI_APP_X === 'true' &&
|
|
|
// iOS 暂不使用该机制
|
|
|
process.env.UNI_UTS_PLATFORM !== 'app-ios' &&
|
|
|
// harmony 同 iOS
|
|
|
process.env.UNI_UTS_PLATFORM !== 'app-harmony') {
|
|
|
plugins.push((0, uni_cli_shared_1.uniUTSExtApiReplace)());
|
|
|
}
|
|
|
else {
|
|
|
const injects = (0, uni_cli_shared_1.parseUniExtApisOnce)(true, process.env.UNI_UTS_PLATFORM, process.env.UNI_UTS_TARGET_LANGUAGE);
|
|
|
if (Object.keys(injects).length) {
|
|
|
plugins.push((0, uni_cli_shared_1.uniViteInjectPlugin)('uni:ext-api-inject', injects));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
// 仅限 h5
|
|
|
if (options.viteLegacyOptions && options.platform === 'h5') {
|
|
|
plugins.push(...(0, plugin_legacy_1.default)((0, vue_1.initPluginViteLegacyOptions)(options)));
|
|
|
}
|
|
|
const uniPlugins = (0, utils_1.initExtraPlugins)(process.env.UNI_CLI_CONTEXT || process.cwd(), process.env.UNI_PLATFORM || 'h5', options);
|
|
|
// debugUni(uniPlugins)
|
|
|
const uniPluginOptions = (0, utils_1.initPluginUniOptions)(uniPlugins);
|
|
|
options.copyOptions = uniPluginOptions.copyOptions;
|
|
|
if (options.vueJsxOptions) {
|
|
|
plugins.push((0, plugin_vue_jsx_1.default)((0, vue_1.initPluginVueJsxOptions)(options, uniPluginOptions.compilerOptions, uniPluginOptions.jsxOptions)));
|
|
|
}
|
|
|
plugins.push({
|
|
|
name: 'uni',
|
|
|
config: (0, config_1.createConfig)(options, uniPlugins),
|
|
|
configResolved: (0, configResolved_1.createConfigResolved)(options),
|
|
|
});
|
|
|
plugins.push(...uniPlugins);
|
|
|
// plugins.push(...initFixedEsbuildInitTSConfck(process.env.UNI_INPUT_DIR))
|
|
|
// 执行 build 命令时,vite 强制了 NODE_ENV
|
|
|
// https://github.com/vitejs/vite/blob/main/packages/vite/src/node/build.ts#L405
|
|
|
// const config = await resolveConfig(inlineConfig, 'build', 'production')
|
|
|
// 在 @vitejs/plugin-vue 之前校正回来
|
|
|
if (process.env.UNI_NODE_ENV &&
|
|
|
process.env.UNI_NODE_ENV !== process.env.NODE_ENV) {
|
|
|
process.env.NODE_ENV = process.env.UNI_NODE_ENV;
|
|
|
}
|
|
|
plugins.unshift((0, vue_1.createPluginVueInstance)((0, vue_1.initPluginVueOptions)(options, uniPlugins, uniPluginOptions)));
|
|
|
let addCopyPlugin = false;
|
|
|
if (options.platform !== 'app') {
|
|
|
addCopyPlugin = true;
|
|
|
}
|
|
|
else {
|
|
|
// 仅在 vue 或 纯原生 App.vue 编译时做 copy
|
|
|
if (process.env.UNI_COMPILER !== 'nvue' ||
|
|
|
(process.env.UNI_RENDERER === 'native' &&
|
|
|
process.env.UNI_RENDERER_NATIVE === 'appService')) {
|
|
|
addCopyPlugin = true;
|
|
|
}
|
|
|
else if (process.env.UNI_APP_X === 'true') {
|
|
|
// app-ios
|
|
|
addCopyPlugin = true;
|
|
|
}
|
|
|
}
|
|
|
if (!(0, uni_cli_shared_1.isNormalCompileTarget)()) {
|
|
|
addCopyPlugin = false;
|
|
|
}
|
|
|
if (addCopyPlugin) {
|
|
|
plugins.push((0, copy_1.uniCopyPlugin)({
|
|
|
outputDir: process.env.UNI_OUTPUT_DIR,
|
|
|
copyOptions: options.copyOptions,
|
|
|
}));
|
|
|
}
|
|
|
if (process.env.UNI_APP_SOURCEMAP === 'true') {
|
|
|
// 清空之前的 sourcemap 目录
|
|
|
const sourceMapPath = (0, uni_cli_shared_1.resolveSourceMapPath)();
|
|
|
if (isFirst) {
|
|
|
// 避免重复清空
|
|
|
isFirst = false;
|
|
|
if (fs_1.default.existsSync(sourceMapPath)) {
|
|
|
(0, uni_cli_shared_1.emptyDir)(sourceMapPath);
|
|
|
}
|
|
|
if (process.env.UNI_APP_X === 'true' &&
|
|
|
process.env.UNI_UTS_PLATFORM === 'app-ios' &&
|
|
|
process.env.UNI_APP_X_CACHE_DIR &&
|
|
|
process.env.NODE_ENV !== 'development') {
|
|
|
plugins.push((0, move_1.uniMovePlugin)({
|
|
|
apply: 'build',
|
|
|
enforce: 'post',
|
|
|
cwd: resolveSourceMapDirByCacheDir(),
|
|
|
pattern: '**/*.js.map',
|
|
|
dest: sourceMapPath,
|
|
|
}));
|
|
|
}
|
|
|
else {
|
|
|
plugins.push((0, move_1.uniMovePlugin)({
|
|
|
apply: 'build',
|
|
|
enforce: 'post',
|
|
|
cwd: process.env.UNI_OUTPUT_DIR,
|
|
|
pattern: '**/*.js.map',
|
|
|
dest: sourceMapPath,
|
|
|
}));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
(0, utils_1.rewriteCompilerSfcParse)();
|
|
|
return plugins;
|
|
|
}
|
|
|
function createUVueAndroidPlugins(options) {
|
|
|
const plugins = [];
|
|
|
options.uvue = true;
|
|
|
const uniPlugins = (0, utils_1.initExtraPlugins)(process.env.UNI_CLI_CONTEXT || process.cwd(), process.env.UNI_PLATFORM || 'h5', options);
|
|
|
// debugUni(uniPlugins)
|
|
|
const uniPluginOptions = (0, utils_1.initPluginUniOptions)(uniPlugins);
|
|
|
options.copyOptions = uniPluginOptions.copyOptions;
|
|
|
plugins.push((0, plugins_1.uniUVuePlugin)(options));
|
|
|
plugins.push(...uniPlugins);
|
|
|
// plugins.push(...initFixedEsbuildInitTSConfck(process.env.UNI_INPUT_DIR))
|
|
|
// 执行 build 命令时,vite 强制了 NODE_ENV
|
|
|
// https://github.com/vitejs/vite/blob/main/packages/vite/src/node/build.ts#L405
|
|
|
// const config = await resolveConfig(inlineConfig, 'build', 'production')
|
|
|
// 在 @vitejs/plugin-vue 之前校正回来
|
|
|
if (process.env.UNI_NODE_ENV &&
|
|
|
process.env.UNI_NODE_ENV !== process.env.NODE_ENV) {
|
|
|
process.env.NODE_ENV = process.env.UNI_NODE_ENV;
|
|
|
}
|
|
|
if ((0, uni_cli_shared_1.isNormalCompileTarget)()) {
|
|
|
plugins.push((0, copy_1.uniCopyPlugin)({
|
|
|
outputDir: process.env.UNI_OUTPUT_DIR,
|
|
|
copyOptions: options.copyOptions,
|
|
|
}));
|
|
|
}
|
|
|
return plugins;
|
|
|
}
|
|
|
function resolveSourceMapDirByCacheDir() {
|
|
|
return path_1.default.resolve(process.env.UNI_APP_X_CACHE_DIR, 'sourcemap');
|
|
|
}
|