ccc-tnt-psd2ui/src/index.js
2023-09-15 10:39:40 +08:00

198 lines
6.1 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.

const fs = require('fs-extra');
const path = require('path');
const JSZIP = require('jszip');
const OS = require('os');
const child_process = require('child_process');
const root = path.join(__dirname, "../");
const projectName = "ccc-tnt-psd2ui";
let tmpFolder = "";
let platform = OS.platform() == 'darwin' ? "mac" : "win32";
let cocosVersion = "v3.4.+";
// let tag = "x";
// 排除部分文件或文件夹
const exclude = name => !['@types', 'node_modules'].includes(name)
// zip 递归读取文件夹下的文件流
function readDir(zip, nowPath) {
// 读取目录中的所有文件及文件夹(同步操作)
let files = fs.readdirSync(nowPath)
//遍历检测目录中的文件
files.filter(exclude).forEach((fileName, index) => {
// 打印当前读取的文件名
console.log(fileName, index)
// 当前文件的全路径
let fillPath = path.join(nowPath, fileName)
// 获取一个文件的属性
let file = fs.statSync(fillPath)
// 如果是目录的话,继续查询
if (file.isDirectory()) {
// 压缩对象中生成该目录
let dirlist = zip.folder(fileName)
// (递归)重新检索目录文件
readDir(dirlist, fillPath)
} else {
// 压缩目录添加文件
zip.file(fileName, fs.readFileSync(fillPath))
}
})
}
// 开始压缩文件
function zipFolder(target, output) {
// 创建 zip 实例
const zip = new JSZIP()
// zip 递归读取文件夹下的文件流
readDir(zip, target)
// 设置压缩格式,开始打包
zip.generateAsync({
// nodejs 专用
type: 'nodebuffer',
// 压缩算法
compression: 'DEFLATE',
// 压缩级别
compressionOptions: { level: 9, },
}).then(content => {
// 将打包的内容写入 当前目录下的 result.zip中
fs.writeFileSync(output, content, 'utf-8')
console.log(`index-> `);
}).catch((err) => {
console.log(`index-> `, err);
});
}
async function taskStart(name) {
tmpFolder = path.join(root, "release", `${name}-${platform}`);
await copyPlugin(name);
await deleteFile("node_modules");
await copyNodeModules();
await deleteFile("@types");
if (cocosVersion === "v3.4.+") {
await deleteFile("src");
}
await deleteFile("package-lock.json");
await reWriteVersion();
await reWritePackage();
await copyNodeJS();
await copyMacSH();
console.log(`创建完成 ${tmpFolder}`);
//// fs.mkdirsSync(path.join(root, "release"));
//// zipFolder(tmpFolder, path.join(root, "release", `${name}-${platform}.zip`));
}
function copyPlugin(name) {
return new Promise((resolve, reject) => {
let _path = path.join(root, name);
console.log(`拷贝插件文件夹[${_path}]到[${tmpFolder}]`);
fs.emptyDirSync(tmpFolder);
fs.copy(_path, tmpFolder, (err) => {
err ? reject(err) : resolve();
});
})
}
function deleteFile(folderName) {
return new Promise((resolve, reject) => {
let node_modules = path.join(tmpFolder, folderName);
if (!fs.existsSync(node_modules)) {
resolve();
return;
}
fs.remove(node_modules, (err) => {
err ? reject(err) : resolve();
});
})
}
function copyNodeModules() {
return new Promise((resolve, reject) => {
let node_modules = path.join(tmpFolder, "node_modules");
fs.copy(path.join(root, "npm-packages", `${platform}-${cocosVersion}`), node_modules, (err) => {
err ? reject(err) : resolve();
});
})
}
function copyNodeJS() {
return new Promise((resolve, reject) => {
let bin = path.join(tmpFolder, "bin");
fs.emptyDirSync(bin);
let nodejs = `node${OS.platform() == 'win32' ? ".exe" : ""}`;
fs.copy(path.join(root, `node`, nodejs), path.join(bin, nodejs), (err) => {
err ? reject(err) : resolve();
});
})
}
function copyMacSH() {
return new Promise((resolve, reject) => {
if (OS.platform() !== 'darwin') {
resolve();
} else {
let sh = `install_depends.sh`;
fs.copy(path.join(root, "npm-packages", sh), path.join(tmpFolder, sh), (err) => {
err ? reject(err) : resolve();
});
}
})
}
function reWritePackage() {
return new Promise(async (resolve, reject) => {
let packagePath = path.join(tmpFolder, "package.json");
fs.readJson(packagePath, (err, data) => {
if (err) {
reject(err);
return;
}
let obj = data;
obj.version = pluginVersion;
delete obj["devDependencies"];
fs.writeJson(packagePath, obj, {
spaces: 4,
encoding: 'utf-8'
}, (err) => {
err ? reject(err) : resolve();
});
});
})
}
function reWriteVersion() {
return new Promise(async (resolve, reject) => {
let packagePath = path.join(root, "package.json");
fs.readJson(packagePath, (err, data) => {
if (err) {
reject(err);
return;
}
data.version = pluginVersion;
fs.writeJson(packagePath, data, {
spaces: 4,
encoding: 'utf-8'
}, (err) => {
err ? reject(err) : resolve();
});
});
})
}
cocosVersion = "v3.4.+"
//cocosVersion = "v2.4.x"
const pluginVersion = "1.0.3"; // 打包之前记得修改这里的版本号第三位为只更新lib文件前两位为更新整个插件。
console.log(`打包版本号为${pluginVersion}\n记得升级版本号~\n版本规则第三位为只更新lib文件前两位为更新整个插件。\n调用本脚本时,会自动赋值给插件版本号`);
taskStart(`${projectName}-${cocosVersion}`);