H5-contact/node_modules/@dcloudio/vite-plugin-uni/dist/plugins/copy.js

157 lines
6.5 KiB
JavaScript
Raw 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.isSameOrSubPath = exports.uniCopyPlugin = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const debug_1 = __importDefault(require("debug"));
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
const debugCopy = (0, debug_1.default)('uni:copy');
function uniCopyPlugin({ outputDir, copyOptions, }) {
const staticDir = uni_cli_shared_1.PUBLIC_DIR + '/**/*';
const uniModulesStaticDir = 'uni_modules/*/' + uni_cli_shared_1.PUBLIC_DIR + '/**/*';
const isDom2 = process.env.UNI_APP_X_DOM2 === 'true';
const uniModulesCppDir = isDom2 ? 'uni_modules/*/cppsdk/**/*' : '';
const assets = [staticDir, uniModulesStaticDir];
const cppAssets = [];
if (uniModulesCppDir) {
cppAssets.push(uniModulesCppDir);
}
const subpackages = (0, uni_cli_shared_1.parseSubpackagesRootOnce)(process.env.UNI_INPUT_DIR, process.env.UNI_PLATFORM);
subpackages.forEach((root) => {
assets.push((0, uni_cli_shared_1.normalizePath)(path_1.default.join(root, staticDir)));
assets.push((0, uni_cli_shared_1.normalizePath)(path_1.default.join(root, uniModulesStaticDir)));
if (uniModulesCppDir) {
cppAssets.push((0, uni_cli_shared_1.normalizePath)(path_1.default.join(root, uniModulesCppDir)));
}
});
copyOptions.assets.forEach((asset) => {
assets.push(asset);
});
const inputDir = (0, uni_cli_shared_1.normalizePath)(process.env.UNI_INPUT_DIR);
const inputDirGlob = (0, uni_cli_shared_1.pathToGlob)(inputDir, '');
const platform = process.env.UNI_PLATFORM;
const utsPlatform = process.env.UNI_UTS_PLATFORM;
// 非当前平台 static 目录
const ignorePlatformStaticDirs = createIgnorePlatformDirs(uni_cli_shared_1.PUBLIC_DIR, platform, utsPlatform);
// 非当前平台 cppsdk 目录
const ignorePlatformCppDirs = uniModulesCppDir
? createIgnorePlatformDirs('cppsdk', platform, utsPlatform)
: [];
const targets = [
{
src: assets,
dest: outputDir,
watchOptions: {
readyTimeout: getReadyTimeout(),
ignored(path) {
const normalizedPath = (0, uni_cli_shared_1.normalizePath)(path);
if (ignorePlatformStaticDirs.find((dir) =>
// dir都是以 / 结尾,所以这里也要以 / 结尾
(normalizedPath + '/').includes(dir))) {
return fs_1.default.statSync(normalizedPath).isDirectory();
}
// 应该是软链
if (!isSameOrSubPath(normalizedPath, inputDir) &&
!isSameOrSubPath(normalizedPath, inputDirGlob) &&
// glob 转义会使 chokidar 从项目上级目录开始遍历,不能忽略这些目录
!isSameOrSubPath(inputDir, normalizedPath)) {
// 目前仅简单处理static
if (normalizedPath.includes('/static/')) {
return false;
}
return true;
}
return false;
},
},
},
];
targets.push(...copyOptions.targets);
if (process.env.UNI_APP_X_DOM2_CPP_DIR && cppAssets.length) {
targets.push({
src: cppAssets,
dest: process.env.UNI_APP_X_DOM2_CPP_DIR,
watchOptions: {
readyTimeout: getReadyTimeout(),
ignored(path) {
const normalizedPath = (0, uni_cli_shared_1.normalizePath)(path);
if (ignorePlatformCppDirs.find((dir) =>
// dir都是以 / 结尾,所以这里也要以 / 结尾
(normalizedPath + '/').includes(dir))) {
return fs_1.default.statSync(normalizedPath).isDirectory();
}
return false;
},
},
});
}
debugCopy(targets);
checkIgnoreStatic(ignorePlatformStaticDirs.map((dir) => dir.substring(1).split('/')));
return (0, uni_cli_shared_1.uniViteCopyPlugin)({
targets,
});
}
exports.uniCopyPlugin = uniCopyPlugin;
function isSameOrSubPath(filename, dir) {
filename = (0, uni_cli_shared_1.normalizePath)(filename);
dir = (0, uni_cli_shared_1.normalizePath)(dir);
return (filename === dir || filename.startsWith(dir.endsWith('/') ? dir : dir + '/'));
}
exports.isSameOrSubPath = isSameOrSubPath;
let isIgnoreChecked = false;
function checkIgnoreStatic(ignoreStatic) {
if (isIgnoreChecked) {
return;
}
isIgnoreChecked = true;
const existIgnore = new Set();
ignoreStatic.forEach((ignore) => {
const dir = path_1.default.resolve(process.env.UNI_INPUT_DIR, ...ignore);
if (fs_1.default.existsSync(dir)) {
existIgnore.add(ignore.join('/'));
}
});
if (existIgnore.size) {
console.log('已忽略静态资源目录:' +
[...existIgnore].join('、') +
'。详见https://uniapp.dcloud.net.cn/tutorial/platform.html#static');
}
}
function getReadyTimeout() {
// chokidar 在部分 windows 上 ready 会触发较早,导致文件还没被全部 copy 过去
if (!uni_cli_shared_1.isWindows) {
return 1000;
}
if (process.env.NODE_ENV === 'development') {
return 1000;
}
// 仅在生产环境使用
return 4000;
}
function createIgnorePlatformDirs(dir, platform, utsPlatform) {
return ((0, uni_cli_shared_1.getPlatforms)()
.filter((p) => {
if (platform === 'app') {
if (process.env.UNI_APP_X === 'true') {
if (p === 'app-android' || p === 'app-ios' || p === 'app-harmony') {
return p !== utsPlatform;
}
return p !== 'app';
}
return p !== 'app' && p !== 'app-plus';
}
else if (platform === 'h5' || platform === 'web') {
return p !== 'h5' && p !== 'web';
}
else if (platform.startsWith('app-')) {
return p !== 'app' && p !== platform;
}
return p !== platform;
})
// 在最后增加 / 是为了避免误判以 platform 开头的目录,比如 app-test
.map((p) => '/' + dir + '/' + p + '/'));
}