uni-ticket-system/node_modules/@dcloudio/vite-plugin-uni/dist/cli/build.js

196 lines
8.0 KiB
JavaScript
Raw Normal View History

2023-12-05 02:11:10 +00:00
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildApp = exports.initBuildOptions = exports.buildSSR = exports.build = exports.buildByVite = void 0;
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const shared_1 = require("@vue/shared");
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
const utils_1 = require("./utils");
async function buildByVite(inlineConfig) {
return Promise.resolve().then(() => __importStar(require('vite'))).then(({ build }) => build(inlineConfig));
}
exports.buildByVite = buildByVite;
async function build(options) {
if (options.platform === 'app') {
return buildApp(options);
}
return buildByVite((0, utils_1.addConfigFile)(initBuildOptions(options, (0, utils_1.cleanOptions)(options))));
}
exports.build = build;
async function buildSSR(options) {
const outputDir = process.env.UNI_OUTPUT_DIR;
const ssrClientDir = path_1.default.resolve(outputDir, 'client');
process.env.UNI_OUTPUT_DIR = ssrClientDir;
const ssrBuildClientOptions = (0, utils_1.cleanOptions)(options);
ssrBuildClientOptions.ssrManifest = true;
ssrBuildClientOptions.outDir = process.env.UNI_OUTPUT_DIR;
process.env.UNI_SSR_CLIENT = 'true';
await buildByVite((0, utils_1.addConfigFile)(initBuildOptions(options, ssrBuildClientOptions)));
const ssrServerDir = path_1.default.resolve(outputDir, 'server');
process.env.UNI_OUTPUT_DIR = ssrServerDir;
const ssrBuildServerOptions = (0, utils_1.cleanOptions)(options);
ssrBuildServerOptions.ssr = path_1.default.resolve(process.env.UNI_INPUT_DIR, 'entry-server.js');
ssrBuildServerOptions.outDir = process.env.UNI_OUTPUT_DIR;
process.env.UNI_SSR_CLIENT = '';
process.env.UNI_SSR_SERVER = 'true';
await buildByVite((0, utils_1.addConfigFile)(initBuildOptions(options, ssrBuildServerOptions)));
// copy ssr-manfiest.json to server
const assets = ['ssr-manifest.json', 'index.html'];
assets.forEach((asset) => {
const ssrManifestFile = path_1.default.join(ssrClientDir, asset);
if (fs_extra_1.default.existsSync(ssrManifestFile)) {
fs_extra_1.default.copyFileSync(ssrManifestFile, path_1.default.join(ssrServerDir, asset));
}
});
}
exports.buildSSR = buildSSR;
function initBuildOptions(options, build) {
return {
root: process.env.VITE_ROOT_DIR,
configFile: options.config,
base: options.base,
logLevel: options.logLevel,
clearScreen: options.clearScreen,
mode: options.mode,
build,
};
}
exports.initBuildOptions = initBuildOptions;
function buildManifestJson() {
const platform = 'app';
const inputDir = process.env.UNI_INPUT_DIR;
const outputDir = process.env.UNI_OUTPUT_DIR;
const pkg = require(path_1.default.resolve(__dirname, '../../package.json'));
process.env.UNI_COMPILER_VERSION =
process.env.UNI_COMPILER_VERSION ||
pkg['uni-app']?.['compilerVersion'] ||
'';
(0, uni_cli_shared_1.initPreContext)(platform, process.env.UNI_CUSTOM_CONTEXT, process.env.UNI_UTS_PLATFORM, process.env.UNI_APP_X === 'true');
const manifestJson = (0, uni_cli_shared_1.normalizeAppManifestJson)((0, uni_cli_shared_1.parseManifestJsonOnce)(inputDir), (0, uni_cli_shared_1.parsePagesJsonOnce)(inputDir, platform));
fs_extra_1.default.outputFileSync(path_1.default.resolve(outputDir, 'manifest.json'), JSON.stringify(manifestJson, null, 2));
}
async function buildApp(options) {
if (options.manifest) {
return buildManifestJson();
}
let appWatcher;
if (options.watch) {
appWatcher = new AppWatcher();
}
if (process.env.UNI_RENDERER === 'native') {
// 纯原生渲染时main.js + App.vue 需要跟页面分开,独立编译(因为需要包含 Vuex 等共享内容)
process.env.UNI_COMPILER = 'nvue';
process.env.UNI_RENDERER_NATIVE = 'appService';
const nvueAppBuilder = await buildByVite((0, utils_1.addConfigFile)((0, shared_1.extend)({ nvueAppService: true, nvue: true }, initBuildOptions(options, (0, utils_1.cleanOptions)(options)))));
if (appWatcher) {
appWatcher.setFirstWatcher(nvueAppBuilder);
}
process.env.UNI_RENDERER_NATIVE = 'pages';
const nvueBuilder = await buildByVite((0, utils_1.addConfigFile)((0, shared_1.extend)({ nvue: true }, initBuildOptions(options, (0, utils_1.cleanOptions)(options)))));
if (appWatcher) {
appWatcher.setSecondWatcher(nvueBuilder);
return appWatcher;
}
return;
}
// 指定为 vue 方便 App 插件初始化 vue 所需插件列表
process.env.UNI_COMPILER = 'vue';
const vueBuilder = await buildByVite((0, utils_1.addConfigFile)(initBuildOptions(options, (0, utils_1.cleanOptions)(options))));
if (appWatcher) {
appWatcher.setFirstWatcher(vueBuilder);
}
// 临时指定为 nvue 方便 App 插件初始化 nvue 所需插件列表
process.env.UNI_COMPILER = 'nvue';
const nvueBuilder = await buildByVite((0, utils_1.addConfigFile)((0, shared_1.extend)({ nvue: true }, initBuildOptions(options, (0, utils_1.cleanOptions)(options)))));
// 还原为 vue
process.env.UNI_COMPILER = 'vue';
if (appWatcher) {
appWatcher.setSecondWatcher(nvueBuilder);
return appWatcher;
}
}
exports.buildApp = buildApp;
class AppWatcher {
constructor() {
this._firstStart = false;
this._firstEnd = false;
this._secondStart = false;
this._secondEnd = false;
}
on(_event, callback) {
this._callback = callback;
}
setFirstWatcher(firstWatcher) {
firstWatcher.on('event', (event) => {
if (event.code === 'BUNDLE_START') {
this._bundleFirstStart(event);
}
else if (event.code === 'BUNDLE_END') {
this._bundleFirstEnd(event);
}
});
}
setSecondWatcher(secondWatcher) {
secondWatcher.on('event', (event) => {
if (event.code === 'BUNDLE_START') {
this._bundleSecondStart(event);
}
else if (event.code === 'BUNDLE_END') {
this._bundleSecondEnd(event);
}
});
}
_bundleFirstStart(event) {
this._firstStart = true;
this._bundleStart(event);
}
_bundleFirstEnd(event) {
this._firstEnd = true;
this._bundleEnd(event);
}
_bundleSecondStart(event) {
this._secondStart = true;
this._bundleStart(event);
}
_bundleSecondEnd(event) {
this._secondEnd = true;
this._bundleEnd(event);
}
_bundleStart(event) {
if (this._firstStart && this._secondStart) {
this._callback(event);
}
}
_bundleEnd(event) {
if (this._firstEnd && this._secondEnd) {
this._callback(event);
}
}
}