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 version = "v3.4.+";
|
|
|
|
// 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-22 15:43:18 +08:00
|
|
|
tmpFolder = path.join(root, `${name}_tmp`);
|
2023-07-24 10:36:46 +08:00
|
|
|
await copyPlugin(name);
|
|
|
|
await deleteFile("node_modules");
|
|
|
|
await copyNodeModules();
|
|
|
|
await deleteFile("@types");
|
|
|
|
await deleteFile("src");
|
|
|
|
await deleteFile("package-lock.json");
|
|
|
|
await reWritePackage();
|
|
|
|
await copyNodeJS();
|
|
|
|
console.log(`创建完成 ${tmpFolder}`);
|
|
|
|
|
|
|
|
// fs.mkdirsSync(path.join(root, "release"));
|
|
|
|
// zipFolder(tmpFolder, path.join(root, "release", `${name}-${tag}.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);
|
|
|
|
console.log(`拷贝插件文件夹[${_path}]到临时文件夹`);
|
|
|
|
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}-${version}`), 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 reWritePackage() {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
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;
|
|
|
|
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-07-24 11:13:08 +08:00
|
|
|
version = "v3.4.+"
|
|
|
|
// version = "v2.4.x"
|
2023-07-24 10:36:46 +08:00
|
|
|
taskStart(`${projectName}-${version}`);
|