Be scalable! Update is a new, open source developer framework and CLI for automating updates of any kind in code projects.
You might also be interested in:
Install Update's CLI and an example updater globally:
$ npm install --global update && updater-example
$ update init
What does Update do?
All updating is accomplished using plugins called updaters, which are run by command line or API, and can be installed globally, locally, or created in a local
- create continuity and consistency across projects
- enforce conventions across all of your projects
- instantly update an old or inherited project to your latest personal preferences (convert tabs to spaces, convert from
eslintor the other way around, or any other detail)
- reformat code to meet your standards
- convert a config file to a different format (json to yaml, yaml to json, etc)
- update files that are typically excluded from build cycles, and are often forgotten about after they're created. For example:
- after initializing a new project with a project generator, like generate or Google's Yeoman, you can "normalize" all of the generated files to use your own preferences
Why should I use Update?
- be more productive: Update eliminates time spent on things that can be automated, but typically aren't since they either don't need to be done often, don't fit into the build cycle or a project's deliverables, or because they're usually updated manually. As code projects mature, time spent on these things tend to stay linear or increase as the size of a community grows. If you maintain more than a handful of projects, time spent on these things compounds with each new project under your stewardship.
- your way, instantly: updaters can be published to and installed from npm, but you can also easily create your own personal updaters. Once your updaters are setup, just run
update init, then projects under your maintenance will convert to the the conventions you prefer within milliseconds after running
- plugin ecosystem: any plugins that work with Base applications will work also with Update. Which means you can use plugins (or generators) from assemble, verb, and generate, to name a few.
- well tested: with more than 1,250 unit tests
Here are some random example commits after running
Project/Commit | Updaters used
- unparalleled flow control: through the use of updaters, sub-updaters and tasks
- generators: support for generate generators. If your updater needs to create new files, there might be a generator for that. Just use the generator the same way you would use an updater.
- render templates: use templates to create new files, or replace existing files
- prompts: It's easy to create custom prompts. Answers to prompts can be used as context for rendering templates, for settings options, determining file names, directory structure, and anything else that requires user feedback.
- any engine: use any template engine to render templates, including handlebars, lodash, swig and pug, or anything supported by consolidate.
- data: gather data from the user's environment to populate "hints" in user prompts or for rendering templates
- fs: in the spirit of gulp, use
.destto read and write globs of files.
- vinyl: files and templates are vinyl files
- streams: full support for gulp and assemble plugins
- smart plugins: Update is built on base, so any "smart" plugin from the Base ecosystem can be used
- stores: persist configuration settings, global defaults, project-specific defaults, answers to prompts, and so on.
- much more!
To use Update's CLI,
update must first be installed globally with npm:
$ npm install --global update
This adds the
update command to your system path, allowing it to be run from anywhere.
Updaters can be found on npm, but if you're not familiar with how Update works, we recommend installing
$ npm install --global updater-example
In the current working directory, create an empty file named
As a habit, when using
update make sure your work is committed, then run:
$ update example
This appends the string
foo to the contents of
example.txt. Visit the updater-example project for additional steps and guidance.
Select the updaters to run every time
update is run. Use
--add to add additional updaters, and
--remove to remove them. You can run this command whenever you want to update your preferences, like after installing new updaters.
$ update init
Display a list of currently installed updaters.
$ update defaults:list# aliased as$ update list
Display a help menu of available commands and flags.
$ update defaults:help# aliased as$ update help
Show the list of updaters that are registered to run on the current project.
$ update defaults:show# aliased as$ update show
Default task for the built-in
$ update help
$ update helpUsage: update <command> [options]Command: updater or tasks to runOptions:--config, -c Save a configuration value to the `update` object in package.json--cwd Set or display the current working directory--help, -h Display this help menu--init, -i Prompts you to choose the updaters to automatically run (your "queue")--add Add updaters to your queue--remove Remove updaters from your queue--run Force tasks to run regardless of command line flags used--silent, -S Silence all tasks and updaters in the terminal--show <key> Display the value of <key>--version, -V Display the current version of update--verbose, -v Display all verbose logging messagesExamples:# run updater "foo"$ update foo# run task "bar" from updater "foo"$ update foo:bar# run multiple tasks from updater "foo"$ update foo:bar,baz,qux# run a sub-generator from updater "foo"$ update foo.abc# run task "xyz" from sub-generator "foo.abc"$ update foo.abc:xyzUpdate attempts to automatically determine if "foo" is a task or updater.If there is a conflict, you can force update to run updater "foo"by specifying its default task. Example: `$ update foo:default`
- Find updaters to install by searching npm for packages with the keyword
- Visit Update's GitHub org to see the updaters maintained by the core team
Plugins from any applications built on base should work with Update (and can be used in your updater):
- base: find base plugins on npm using the
- assemble: find assemble plugins on npm using the
- generate: find generate plugins on npm using the
- templates: find templates plugins on npm using the
- [update][update-plugin]: find update plugins on npm using the
- verb: find verb plugins on npm using the
Visit the updater documentation guide to learn how to use, author and publish updaters.
Customize settings and default behavior using the
update property in package.json. These values will override global defaults.
"update":"updaters": "package" "license" "keywords"
The following options may be defined in package.json.
The updaters to run on the current project.
updater-package on the current project:
"update":"updaters": "package" "license"
- See the updaters maintained by the core team
- Browse the documentation
- Browse the API documentation
- Learn about updaters
- Learn about the built-in updaters
- Learn more about base
- Get Sublime Text Snippets for creating tasks and updaters
Changelog entries are classified using the following labels from keep-a-changelog:
added: for new features
changed: for changes in existing functionality
deprecated: for once-stable features removed in upcoming releases
removed: for deprecated features removed in this release
fixed: for any bug fixes
Custom labels used in this changelog:
dependencies: bumps dependencies
housekeeping: code re-organization, minor edits, or other changes that don't fit in one of the other categories.
Please let us know if any of the following heading links are broken. Thanks!
0.7.3 - 2016-07-21
app.cwdin the current instance is the cwd defined by the user on the options or argv.
0.7.0 - 2016-07-21
- as of v0.7.0, we will begin using the keep-a-changelog format for release history
- adds support user-defined templates
- adds support for
app.home(), which resolves to
~/or the user-defined
options.homedir. This directory is used to determine the base directory for user-defined templates.
- adds support for common-config. Exposed on the
- adds experimental support for a
homeupdater. If an
updatefile.jsexists in the
~/updatedirectory (this will be customizable, but it's not yet), this file will be loaded and
.use()d as a plugin before other updaters are loaded. You can use this to set options, add defaults, etc. But you can also run it explictly via commandline with the
app.cwdso that it's updated when
--dest) is set
- ensure args are parsed consistently
- Swap out base for assemble-core (which uses Base via templates). This allows updaters to seamlessly run generators from generate, assemble, or verb (when a file needs to be created, or re-created for example)
- Adds assemble-loader to support glob patterns in collection methods
First stable release!
(Changelog generated by helper-changelog)
- assemble: Get the rocks out of your socks! Assemble makes you fast at creating web projects… more | homepage
- base: base is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting… more | homepage
- generate: Command line tool and developer framework for scaffolding out new GitHub projects. Generate offers the… more | homepage
- verb: Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used… more | homepage
Here are some suggestions!
- If you get like Generate and want to tweet about it, please feel free to mention
@generatejsor use the
- Show your love by starring Generate and
- Get implementation help on StackOverflow (please use the
generatejstag in questions)
- Gitter Discuss Generate with us on Gitter
- If you publish an generator, thank you! To make your project as discoverable as possible, please add the keyword
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
Please read the contributing guide for avice on opening issues, pull requests, and coding standards.
Install dev dependencies:
$ npm install -d && npm test
This file was generated by verb-generate-readme, v0.1.30, on September 01, 2016.