electron-version-deployer-cli 0.3.7 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/cli.cjs +27 -1
- package/dist/main.js +1 -1
- package/dist/types/EVDConfigType.d.ts +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -150,6 +150,13 @@ export type EVDConfigType = {
|
|
|
150
150
|
// package.json 文件路径(相对 folder)
|
|
151
151
|
packageJSON: string;
|
|
152
152
|
};
|
|
153
|
+
// 额外需要打包的文件夹
|
|
154
|
+
// 这将会在部署时将文件夹里面的内容,一同部署到服务器上
|
|
155
|
+
// 文件会被放在根目录的 basename 文件中,比如
|
|
156
|
+
// 传入 ['/user/myname/Desktop/test'] 这样一个文件夹,那么最终会被放到根目录的
|
|
157
|
+
// /test 中
|
|
158
|
+
// 注意当个文件不能超过 25mb 这是 cloudflare 的限制
|
|
159
|
+
extraFolders: string[] | (() => Promise<string[]>) | (() => string[]);
|
|
153
160
|
// netlify 部署设置
|
|
154
161
|
netlify?: {
|
|
155
162
|
// 网站域名如 https://site.netlify.app
|
package/dist/cli.cjs
CHANGED
|
@@ -591,11 +591,37 @@ commander.program.command("deploy").description("执行部署").action(async (so
|
|
|
591
591
|
await validateConfigs(configs);
|
|
592
592
|
await checkIsFirstTimeDeploy(configs);
|
|
593
593
|
await validateRemotePackageJSON(configs);
|
|
594
|
+
await deployExtraFolders(configs);
|
|
594
595
|
await deploy(configs);
|
|
595
596
|
} catch (e) {
|
|
596
597
|
console.log(logSymbols.error, e.toString());
|
|
597
598
|
}
|
|
598
599
|
});
|
|
600
|
+
async function deployExtraFolders(configs) {
|
|
601
|
+
const extraFolders = configs.extraFolders;
|
|
602
|
+
let folders = [];
|
|
603
|
+
if (typeof extraFolders === "function") {
|
|
604
|
+
folders = await extraFolders();
|
|
605
|
+
} else {
|
|
606
|
+
folders = extraFolders;
|
|
607
|
+
}
|
|
608
|
+
for (const folder of folders) {
|
|
609
|
+
if (!node_fs.existsSync(folder)) {
|
|
610
|
+
throw new Error(`未找到文件夹 ${folder}`);
|
|
611
|
+
}
|
|
612
|
+
const stat = node_fs.statSync(folder);
|
|
613
|
+
if (!stat.isDirectory()) {
|
|
614
|
+
throw new Error(`${folder} 不是一个文件夹`);
|
|
615
|
+
}
|
|
616
|
+
const destFolder = r(`node_modules/.evd/${node_path.basename(folder)}`);
|
|
617
|
+
if (node_fs.existsSync(destFolder)) {
|
|
618
|
+
node_fs.rmSync(destFolder, { recursive: true });
|
|
619
|
+
}
|
|
620
|
+
node_fs.cpSync(folder, r(`node_modules/.evd/${node_path.basename(folder)}`), {
|
|
621
|
+
recursive: true
|
|
622
|
+
});
|
|
623
|
+
}
|
|
624
|
+
}
|
|
599
625
|
async function deploy(configs) {
|
|
600
626
|
console.log(logSymbols.info, "开始部署", r());
|
|
601
627
|
await getWhichProvider(configs).deploy({
|
|
@@ -698,4 +724,4 @@ async function installPrebuilt(configs) {
|
|
|
698
724
|
}
|
|
699
725
|
commander.program.description(
|
|
700
726
|
"Electron 版本部署 CLI,简化你的 Electron 软件更新,让一切变得简单。"
|
|
701
|
-
).helpOption("-h, --help", "使用帮助").version("0.
|
|
727
|
+
).helpOption("-h, --help", "使用帮助").version("0.4.0", "-V, --version", "显示版本号").parse(process.argv);
|
package/dist/main.js
CHANGED
|
@@ -94,7 +94,7 @@ function compareObjectsIsEqual(obj1, obj2) {
|
|
|
94
94
|
return true;
|
|
95
95
|
}
|
|
96
96
|
const CLI_NAME = "electron-version-deployer-cli";
|
|
97
|
-
const installerCodeStr = '// 该文件用于 fork 使用,将会写入到\n// app.getAppPath() + \'/_evdInstallerTmp.js\' 路径中\n// 从避免 window 上替换时出现的资源占用问题\nconst {\n existsSync,\n mkdirSync,\n readdirSync,\n statSync,\n appendFileSync,\n writeFileSync,\n readFileSync,\n} = require("fs");\nconst { join, resolve, basename, sep, dirname, isAbsolute } = require("path");\n\ntry {\n copyFolderRecursiveSync("__unzipPath__", "__appPath__");\n process.parentPort.postMessage("exitManually");\n process.exit(0);\n} catch (error) {\n appendFileSync(\n resolve(__dirname, "evdInstallerErrors.txt"),\n `\n ${new Date().toString()}\\n\n ${error.toString()}\\n\n -- stack\\n\n ${error.stack}\\n\n ----------------------------------------------------------------\\n\n `\n );\n process.parentPort.postMessage("exitManually");\n process.exit(0);\n}\n\n// 复制文件夹及其内容的函数\nfunction copyFolderRecursiveSync(source, target) {\n // 如果目标目录不存在,则创建目标目录\n if (!existsSync(target)) {\n mkdirRecursiveSync(target);\n }\n\n // 获取源目录的文件列表\n const files = readdirSync(source);\n\n // 遍历文件列表,处理每个文件或子目录\n files.forEach((folderOrFile) => {\n const sourcePath = join(source, folderOrFile);\n const targetPath = join(target, folderOrFile);\n\n // 如果当前文件是文件夹,则递归复制文件夹\n if (statSync(sourcePath).isDirectory()) {\n if (folderOrFile === "node_modules") {\n replaceChangedModuleSync(sourcePath, targetPath);\n } else {\n copyFolderRecursiveSync(sourcePath, targetPath);\n }\n } else {\n // 否则,复制文件\n try {\n copyFileSync(sourcePath, targetPath);\n } catch (error) {\n appendFileSync(\n resolve(__dirname, "evdInstallerErrors.txt"),\n `\n ${new Date().toString()}\\n\n ${error.toString()}\\n\n -- stack\\n\n ${error.stack}\\n\n ----------------------------------------------------------------\\n\n `\n );\n }\n }\n });\n}\n\nfunction copyFileSync(source, target) {\n let targetFile = target;\n\n if (existsSync(target)) {\n if (statSync(target).isDirectory()) {\n targetFile = join(target, basename(source));\n }\n }\n\n writeFileSync(targetFile, readFileSync(source));\n}\n\nfunction replaceChangedModuleSync(\n sourceNodeModulesFolder,\n destNodeModulesFolder\n) {\n // 读取 evdUnzip/node_modules 所有子文件\n const fileOrFolder = readdirSync(sourceNodeModulesFolder);\n\n // 遍历文件列表,处理每个文件或子目录\n fileOrFolder.forEach((folderOrFileName) => {\n const sourcePath = join(sourceNodeModulesFolder, folderOrFileName);\n const targetPath = join(destNodeModulesFolder, folderOrFileName);\n\n // 如果当前文件是文件夹,则判断是否要更新\n if (statSync(sourcePath).isDirectory()) {\n // 如果是组织文件夹比如\n if (folderOrFileName.startsWith("@")) {\n replaceChangedModuleSync(sourcePath, targetPath);\n } else {\n // 如果不存在,或者版本不一样则进行替换\n if (shouldReplaceModule(sourcePath, targetPath)) {\n copyFolderRecursiveSync(sourcePath, targetPath);\n }\n }\n } else {\n copyFileSync(sourcePath, targetPath);\n }\n });\n}\n\nfunction shouldReplaceModule(sourcePath, destPath) {\n const sourceVersion = getPackageVersion(sourcePath);\n const destVersion = getPackageVersion(destPath);\n return sourceVersion !== destVersion;\n}\n\nfunction getPackageVersion(packagePath) {\n try {\n const packageJsonPath = join(packagePath, "package.json");\n const packageJsonContent = readFileSync(packageJsonPath, "utf-8");\n const packageJson = JSON.parse(packageJsonContent);\n return packageJson.version;\n } catch (error) {\n console.error(`Error reading package.json in ${packagePath}:`, error);\n return null;\n }\n}\n\nfunction mkdirRecursiveSync(targetPath) {\n
|
|
97
|
+
const installerCodeStr = '// 该文件用于 fork 使用,将会写入到\n// app.getAppPath() + \'/_evdInstallerTmp.js\' 路径中\n// 从避免 window 上替换时出现的资源占用问题\nconst {\n existsSync,\n mkdirSync,\n readdirSync,\n statSync,\n appendFileSync,\n writeFileSync,\n readFileSync,\n} = require("fs");\nconst { join, resolve, basename, sep, dirname, isAbsolute } = require("path");\n\ntry {\n copyFolderRecursiveSync("__unzipPath__", "__appPath__");\n process.parentPort.postMessage("exitManually");\n process.exit(0);\n} catch (error) {\n appendFileSync(\n resolve(__dirname, "evdInstallerErrors.txt"),\n `\n ${new Date().toString()}\\n\n ${error.toString()}\\n\n -- stack\\n\n ${error.stack}\\n\n ----------------------------------------------------------------\\n\n `\n );\n process.parentPort.postMessage("exitManually");\n process.exit(0);\n}\n\n// 复制文件夹及其内容的函数\nfunction copyFolderRecursiveSync(source, target) {\n // 如果目标目录不存在,则创建目标目录\n if (!existsSync(target)) {\n mkdirRecursiveSync(target);\n }\n\n // 获取源目录的文件列表\n const files = readdirSync(source);\n\n // 遍历文件列表,处理每个文件或子目录\n files.forEach((folderOrFile) => {\n const sourcePath = join(source, folderOrFile);\n const targetPath = join(target, folderOrFile);\n\n // 如果当前文件是文件夹,则递归复制文件夹\n if (statSync(sourcePath).isDirectory()) {\n if (folderOrFile === "node_modules") {\n replaceChangedModuleSync(sourcePath, targetPath);\n } else {\n copyFolderRecursiveSync(sourcePath, targetPath);\n }\n } else {\n // 否则,复制文件\n try {\n copyFileSync(sourcePath, targetPath);\n } catch (error) {\n appendFileSync(\n resolve(__dirname, "evdInstallerErrors.txt"),\n `\n ${new Date().toString()}\\n\n ${error.toString()}\\n\n -- stack\\n\n ${error.stack}\\n\n ----------------------------------------------------------------\\n\n `\n );\n }\n }\n });\n}\n\nfunction copyFileSync(source, target) {\n let targetFile = target;\n\n if (existsSync(target)) {\n if (statSync(target).isDirectory()) {\n targetFile = join(target, basename(source));\n }\n }\n\n writeFileSync(targetFile, readFileSync(source));\n}\n\nfunction replaceChangedModuleSync(\n sourceNodeModulesFolder,\n destNodeModulesFolder\n) {\n // 读取 evdUnzip/node_modules 所有子文件\n const fileOrFolder = readdirSync(sourceNodeModulesFolder);\n\n // 遍历文件列表,处理每个文件或子目录\n fileOrFolder.forEach((folderOrFileName) => {\n const sourcePath = join(sourceNodeModulesFolder, folderOrFileName);\n const targetPath = join(destNodeModulesFolder, folderOrFileName);\n\n // 如果当前文件是文件夹,则判断是否要更新\n if (statSync(sourcePath).isDirectory()) {\n // 如果是组织文件夹比如\n if (folderOrFileName.startsWith("@")) {\n replaceChangedModuleSync(sourcePath, targetPath);\n } else {\n // 如果不存在,或者版本不一样则进行替换\n if (shouldReplaceModule(sourcePath, targetPath)) {\n copyFolderRecursiveSync(sourcePath, targetPath);\n }\n }\n } else {\n copyFileSync(sourcePath, targetPath);\n }\n });\n}\n\nfunction shouldReplaceModule(sourcePath, destPath) {\n const sourceVersion = getPackageVersion(sourcePath);\n const destVersion = getPackageVersion(destPath);\n return sourceVersion !== destVersion;\n}\n\nfunction getPackageVersion(packagePath) {\n try {\n const packageJsonPath = join(packagePath, "package.json");\n const packageJsonContent = readFileSync(packageJsonPath, "utf-8");\n const packageJson = JSON.parse(packageJsonContent);\n return packageJson.version;\n } catch (error) {\n console.error(`Error reading package.json in ${packagePath}:`, error);\n return null;\n }\n}\n\nfunction mkdirRecursiveSync(targetPath) {\n mkdirSync(targetPath, { recursive: true });\n}\n';
|
|
98
98
|
function forceDeleteSync(targetPath) {
|
|
99
99
|
try {
|
|
100
100
|
const stats = fs.statSync(targetPath);
|