ccc-tnt-psd2ui/src/index.js

198 lines
6.1 KiB
JavaScript
Raw Normal View History

2023-07-24 10:36:46 +08:00
const fs = require('fs-extra');
2023-07-22 15:43:18 +08:00
const path = require('path');
const JSZIP = require('jszip');
const OS = require('os');
const child_process = require('child_process');
const root = path.join(__dirname, "../");
2023-07-24 10:36:46 +08:00
const projectName = "ccc-tnt-psd2ui";
2023-07-22 15:43:18 +08:00
let tmpFolder = "";
2023-07-24 10:36:46 +08:00
let platform = OS.platform() == 'darwin' ? "mac" : "win32";
let cocosVersion = "v3.4.+";
2023-07-24 10:36:46 +08:00
// let tag = "x";
2023-07-22 15:43:18 +08:00
// 排除部分文件或文件夹
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))
}
})
}
// 开始压缩文件
2023-07-24 10:36:46 +08:00
function zipFolder(target, output) {
2023-07-22 15:43:18 +08:00
// 创建 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')
2023-07-24 10:36:46 +08:00
console.log(`index-> `);
2023-07-22 15:43:18 +08:00
2023-07-24 10:36:46 +08:00
}).catch((err) => {
console.log(`index-> `, err);
2023-07-22 15:43:18 +08:00
2023-07-24 10:36:46 +08:00
});
}
2023-07-22 15:43:18 +08:00
2023-07-24 10:36:46 +08:00
async function taskStart(name) {
2023-07-24 11:25:58 +08:00
tmpFolder = path.join(root, "release", `${name}-${platform}`);
2023-07-24 10:36:46 +08:00
await copyPlugin(name);
await deleteFile("node_modules");
await copyNodeModules();
await deleteFile("@types");
if (cocosVersion === "v3.4.+") {
await deleteFile("src");
}
2023-07-24 10:36:46 +08:00
await deleteFile("package-lock.json");
await reWriteVersion();
2023-07-24 10:36:46 +08:00
await reWritePackage();
await copyNodeJS();
2023-07-24 11:25:58 +08:00
await copyMacSH();
2023-07-24 10:36:46 +08:00
console.log(`创建完成 ${tmpFolder}`);
//// fs.mkdirsSync(path.join(root, "release"));
//// zipFolder(tmpFolder, path.join(root, "release", `${name}-${platform}.zip`));
2023-07-22 15:43:18 +08:00
}
2023-07-24 10:36:46 +08:00
function copyPlugin(name) {
return new Promise((resolve, reject) => {
2023-07-22 15:43:18 +08:00
2023-07-24 10:36:46 +08:00
let _path = path.join(root, name);
2023-07-24 11:25:58 +08:00
console.log(`拷贝插件文件夹[${_path}]到[${tmpFolder}]`);
2023-07-24 10:36:46 +08:00
fs.emptyDirSync(tmpFolder);
fs.copy(_path, tmpFolder, (err) => {
err ? reject(err) : resolve();
});
})
2023-07-22 15:43:18 +08:00
}
2023-07-24 10:36:46 +08:00
function deleteFile(folderName) {
return new Promise((resolve, reject) => {
let node_modules = path.join(tmpFolder, folderName);
if (!fs.existsSync(node_modules)) {
resolve();
return;
2023-07-22 15:43:18 +08:00
}
2023-07-24 10:36:46 +08:00
fs.remove(node_modules, (err) => {
err ? reject(err) : resolve();
});
})
2023-07-22 15:43:18 +08:00
}
2023-07-24 10:36:46 +08:00
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) => {
2023-07-24 10:36:46 +08:00
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();
});
})
}
2023-07-24 11:25:58 +08:00
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();
});
}
})
}
2023-07-24 10:36:46 +08:00
function reWritePackage() {
return new Promise(async (resolve, reject) => {
2023-07-24 10:36:46 +08:00
let packagePath = path.join(tmpFolder, "package.json");
fs.readJson(packagePath, (err, data) => {
2023-07-22 15:43:18 +08:00
if (err) {
2023-07-24 10:36:46 +08:00
reject(err);
return;
2023-07-22 15:43:18 +08:00
}
2023-07-24 10:36:46 +08:00
let obj = data;
obj.version = pluginVersion;
2023-07-24 10:36:46 +08:00
delete obj["devDependencies"];
fs.writeJson(packagePath, obj, {
spaces: 4,
encoding: 'utf-8'
}, (err) => {
err ? reject(err) : resolve();
});
2023-07-22 15:43:18 +08:00
});
2023-07-24 10:36:46 +08:00
})
2023-07-22 15:43:18 +08:00
}
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}`);