使用 NodeJS 文件系统 (fs) 复制 asar 文件
Copy asar file using NodeJS file system (fs)
我的目标是使用 NodeJS 的文件系统复制一个 .asar 文件。我有一个文件路径,需要将 .asar 文件复制到另一个目的地。
文件路径示例:
C:/Users/redacted/Documents/ExampleElectronApp/example.asar
我需要将此文件(存档)复制到另一个目录。
之前我用遍历和复制功能复制了它,但它最终创建了一个名为 filename.asar 的目录,而不是一个名为 filename.asar 的实际文件这函数似乎可以正确处理所有其他文件和文件夹(.asar 档案除外)。
我试过的
1:使用读写流复制存档。
var fs = require('fs');
fs.createReadStream('C:/Users/redacted/Documents/redacted/node_modules/electron-prebuilt/dist/resources/default_app.asar').pipe(fs.createWriteStream('C:/Users/redacted/Desktop/test.asar'));
最后出现错误:
它说找不到这个文件,但我可以向你保证,复制源路径确实会引导我找到 .asar 文件。
2:使用asar需求创建包。
var fs = require('fs');
var asar = require('asar');
asar.createPackage('C:/Users/redacted/Documents/redacted/node_modules/electron-prebuilt/dist/resources/default_app.asar', 'C:/Users/redacted/Desktop/test.asar', function() {
console.log('done.');
})
虽然此函数确实记录了正确的 'done' 消息,但似乎复制不成功。目标目录中未显示新文件或文件夹。
提前谢谢大家。
您可以使用 NODEJS 模块的“path”。
const path = require('path')
filePathSource = path.join(__dirname, 'a', 'b', 'c', 'source.asar')
filePathTarget = path.join(__dirname, 'a', 'b', 'c', 'target.asar')
fs.createReadStream(filePathSource).pipe(fs.createWriteStream(filePathTarget));
我最终成功的方法是重命名 .asar 文件,然后在复制它们后将它们重命名。这是我复制 .asar 文件的最终来源:
var filePathSource = path.join(__dirname, 'default_app.asar')
var filePathTarget = path.join(__dirname, 'test.txt')
var filePathSourceNew = filePathSource.slice(0, -5) + ".txt";
console.log(filePathSourceNew);
fs.rename(filePathSource, filePathSourceNew, function(err) {
if (err) {
console.log('ERROR: ' + err);
} else {
var stream = fs.createReadStream(filePathSourceNew).pipe(fs.createWriteStream(filePathTarget));
stream.on('finish', function () {
fs.rename(filePathSourceNew, filePathSource, function(err) {
if (err) {
console.log('ERROR: ' + err);
} else {
fs.rename(filePathTarget, filePathTarget.slice(0, -4) + ".asar", function(err) {
if (err) {
console.log('ERROR: ' + err);
} else {
console.log("Complete Asar Copy");
}
});
}
});
});
}
});
也许你可以在 fs 模块中禁用对 asar 的支持,比如:
process.noAsar = true
这是文档:https://electronjs.org/docs/tutorial/application-packaging#treating-an-asar-archive-as-a-normal-file
我的目标是使用 NodeJS 的文件系统复制一个 .asar 文件。我有一个文件路径,需要将 .asar 文件复制到另一个目的地。
文件路径示例:
C:/Users/redacted/Documents/ExampleElectronApp/example.asar
我需要将此文件(存档)复制到另一个目录。
之前我用遍历和复制功能复制了它,但它最终创建了一个名为 filename.asar 的目录,而不是一个名为 filename.asar 的实际文件这函数似乎可以正确处理所有其他文件和文件夹(.asar 档案除外)。
我试过的
1:使用读写流复制存档。
var fs = require('fs');
fs.createReadStream('C:/Users/redacted/Documents/redacted/node_modules/electron-prebuilt/dist/resources/default_app.asar').pipe(fs.createWriteStream('C:/Users/redacted/Desktop/test.asar'));
最后出现错误:
它说找不到这个文件,但我可以向你保证,复制源路径确实会引导我找到 .asar 文件。
2:使用asar需求创建包。
var fs = require('fs');
var asar = require('asar');
asar.createPackage('C:/Users/redacted/Documents/redacted/node_modules/electron-prebuilt/dist/resources/default_app.asar', 'C:/Users/redacted/Desktop/test.asar', function() {
console.log('done.');
})
虽然此函数确实记录了正确的 'done' 消息,但似乎复制不成功。目标目录中未显示新文件或文件夹。
提前谢谢大家。
您可以使用 NODEJS 模块的“path”。
const path = require('path')
filePathSource = path.join(__dirname, 'a', 'b', 'c', 'source.asar')
filePathTarget = path.join(__dirname, 'a', 'b', 'c', 'target.asar')
fs.createReadStream(filePathSource).pipe(fs.createWriteStream(filePathTarget));
我最终成功的方法是重命名 .asar 文件,然后在复制它们后将它们重命名。这是我复制 .asar 文件的最终来源:
var filePathSource = path.join(__dirname, 'default_app.asar')
var filePathTarget = path.join(__dirname, 'test.txt')
var filePathSourceNew = filePathSource.slice(0, -5) + ".txt";
console.log(filePathSourceNew);
fs.rename(filePathSource, filePathSourceNew, function(err) {
if (err) {
console.log('ERROR: ' + err);
} else {
var stream = fs.createReadStream(filePathSourceNew).pipe(fs.createWriteStream(filePathTarget));
stream.on('finish', function () {
fs.rename(filePathSourceNew, filePathSource, function(err) {
if (err) {
console.log('ERROR: ' + err);
} else {
fs.rename(filePathTarget, filePathTarget.slice(0, -4) + ".asar", function(err) {
if (err) {
console.log('ERROR: ' + err);
} else {
console.log("Complete Asar Copy");
}
});
}
});
});
}
});
也许你可以在 fs 模块中禁用对 asar 的支持,比如:
process.noAsar = true
这是文档:https://electronjs.org/docs/tutorial/application-packaging#treating-an-asar-archive-as-a-normal-file