Node.js auto-update plugin.
Compares local package.json with repository package.json and if versions don't match, it downloads the latest zip and extracts it.
With npm do:
$ npm install auto-updater
- Compares local version with remote version.
- If versions don't match, it downloads the repository.
- It extracts the repository, overwriting the modified files.
- Compares local dependencies with remote dependencies and tells if they don't match.
git-clone
The user has a git clone. Recommend use the "git pull" commandcheck.up-to-date ( v )
versions matchcheck.out-dated ( v_old , v)
versions dont matchupdate.downloaded
Update downloaded in the machineupdate.not-installed
Update was already in the dir, so it wasnt installedupdate.extracted
The update has been extracted correctly.download.start ( name )
The download of "name of the update" has starteddownload.progress ( name , % )
The download has been updated. New percentagedownload.end ( name )
The download has endeddownload.error ( err )
Something happened to the downloadend
Called when all is over ( along with 'check-up-to-date' if there are no updates, or with 'extracted' if it was installed )
use ( config )
on ( event, callback )
Sets the events (use like EventEmitter)fire ( command )
Fires a command
pathToJson: ''
from repo main folder to package.json (only subfolders. Can't go backwards)autoupdate: false
if true, all stages run one after the other. Else, you need to force the stages with the force methodscheckgit: true
Checks if the .git folder exists, so its a dev and doesnt download the project.jsonhost: 'raw.githubusercontent.com'
URL of raw remote package.jsoncontenthost: 'codeload.github.com'
URL of full remote zipprogressDebounce: 0
Debounces the 'download.progress' event (0 = disabled)devmode: false
Developer Mode. Enhances error messages using console.log
check
Compares the two versions. Triggers: 'git-clone', 'check.up-to-date', 'check.out-dated'download-update
Downloads the update. Triggers: 'update.downloaded', 'update.not-installed','download.*'extract
Extracts (or installs) the update reeplacing old files (it doesnt delete untracked files). Triggers: 'update.extracted'diff-dependencies
Returns an array of dependencies (only the names) that dont match. Returns an empty array if there's no difference. Requires the 'check' command first.
Warning: do not run this methods in other order.
"version":"0.0.1",
"auto-updater":{
"repo":"/github-user/github-repo",
"branch":"master"
}
That segment must be added to the project (local). It is critical that the package.json of the app you are using has a version field (so it can be compared with the remote package.json stored on github), and the auto-updater field, so it knows where to get the remote data.
var AutoUpdater = require('auto-updater');
var autoupdater = new AutoUpdater({
pathToJson: '',
autoupdate: false,
checkgit: true,
jsonhost: 'raw.githubusercontent.com',
contenthost: 'codeload.github.com',
progressDebounce: 0,
devmode: false
});
// State the events
autoupdater.on('git-clone', function() {
console.log("You have a clone of the repository. Use 'git pull' to be up-to-date");
});
autoupdater.on('check.up-to-date', function(v) {
console.info("You have the latest version: " + v);
});
autoupdater.on('check.out-dated', function(v_old, v) {
console.warn("Your version is outdated. " + v_old + " of " + v);
autoupdater.fire('download-update'); // If autoupdate: false, you'll have to do this manually.
// Maybe ask if the'd like to download the update.
});
autoupdater.on('update.downloaded', function() {
console.log("Update downloaded and ready for install");
autoupdater.fire('extract'); // If autoupdate: false, you'll have to do this manually.
});
autoupdater.on('update.not-installed', function() {
console.log("The Update was already in your folder! It's read for install");
autoupdater.fire('extract'); // If autoupdate: false, you'll have to do this manually.
});
autoupdater.on('update.extracted', function() {
console.log("Update extracted successfully!");
console.warn("RESTART THE APP!");
});
autoupdater.on('download.start', function(name) {
console.log("Starting downloading: " + name);
});
autoupdater.on('download.progress', function(name, perc) {
process.stdout.write("Downloading " + perc + "% \033[0G");
});
autoupdater.on('download.end', function(name) {
console.log("Downloaded " + name);
});
autoupdater.on('download.error', function(err) {
console.error("Error when downloading: " + err);
});
autoupdater.on('end', function() {
console.log("The app is ready to function");
});
autoupdater.on('error', function(name, e) {
console.error(name, e);
});
// Start checking
autoupdater.fire('check');