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";
|
2023-08-31 17:53:22 +08:00
|
|
|
|
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");
|
2023-08-31 17:53:22 +08:00
|
|
|
|
if (cocosVersion === "v3.4.+") {
|
|
|
|
|
await deleteFile("src");
|
|
|
|
|
}
|
2023-07-24 10:36:46 +08:00
|
|
|
|
await deleteFile("package-lock.json");
|
2023-08-31 17:53:22 +08:00
|
|
|
|
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}`);
|
|
|
|
|
|
2023-08-31 17:53:22 +08:00
|
|
|
|
//// 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");
|
2023-08-31 17:53:22 +08:00
|
|
|
|
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() {
|
2023-08-31 17:53:22 +08:00
|
|
|
|
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;
|
2023-08-31 17:53:22 +08:00
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
|
2023-08-31 17:53:22 +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"
|
|
|
|
|
|
2023-09-15 10:39:40 +08:00
|
|
|
|
const pluginVersion = "1.0.3"; // 打包之前记得修改这里的版本号,第三位为只更新lib文件,前两位为更新整个插件。
|
2023-08-31 17:53:22 +08:00
|
|
|
|
|
|
|
|
|
console.log(`打包版本号为${pluginVersion}\n记得升级版本号~\n版本规则:第三位为只更新lib文件,前两位为更新整个插件。\n调用本脚本时,会自动赋值给插件版本号`);
|
|
|
|
|
|
|
|
|
|
taskStart(`${projectName}-${cocosVersion}`);
|