knex-automigrate
Version:
Table schema based database migration tool, built on top of the knex.js
156 lines (123 loc) • 3.66 kB
Markdown
knex-automigrate
================
[](https://npmjs.org/package/knex-automigrate)
[](https://npmjs.org/package/knex-automigrate)
[](https://david-dm.org/why2pac/knex-automigrate)
Table schema based database migration tool, built on top of the knex.js
- Migration schema file name must be started with `table_`.
- Currently supported dialects to index migration : `mysql`
## Installation
```bash
$ npm install knex-automigrate -g
```
## Usage
```bash
Usage: knex-automigrate [options] [command]
Commands:
migrate:auto Run all migration table schemas.
Options:
-h, --help output usage information
-V, --version output the version number
--debug Run with debugging.
--knexfile [path] Specify the knexfile path.
--cwd [path] Specify the working directory.
--env [name] environment, default: process.env.NODE_ENV || development
```
### Before (traditional database migration with knex.js)
```bash
$ knex migrate:make create_users_table
```
```node
// 201701010000_create_users_table.js
exports.up = function(knex, Promise) {
return Promise.all([
knex.schema.createTableIfNotExists('users', function(table) {
table.increments('user_id').unsigned().comment('PK');
table.string('email', 128).notNullable().comment('E-Mail');
table.string('nickname', 128).notNullable().comment('Name');
})
]);
});
```
```bash
$ knex migrate:latest
```
```bash
$ knex migrate:make alter_users_table
```
```node
// 201701010000_alter_users_table.js
exports.up = function(knex, Promise) {
return Promise.all([
knex.schema.alterTable('users', function(table) {
table.dropColumn('nickname');
table.string('email', 64).notNullable().comment('E-Mail').alter();
table.string('name', 64).notNullable().comment('Name');
})
]);
});
```
```bash
$ knex migrate:latest
```
Migration files are,
```
App
├─ migrations
│ ├─ 201701010000_create_users_table.js
│ └─ 201701010000_alter_users_table.js
└─ knexfile.js
```
### After (database migration with knex-automigrate)
```node
// table_users.js
exports.auto = function(migrator, knex) {
return [
migrator('users', function(table) {
table.increments('user_id').unsigned().comment('PK');
table.string('email', 128).notNullable().comment('E-Mail');
table.string('nickname', 128).notNullable().comment('Name');
});
];
});
```
```bash
$ knex-automigrate migrate:auto
```
```node
// table_users.js
exports.auto = function(migrator, knex) {
return [
migrator('users', function(table) {
table.increments('user_id').unsigned().comment('PK');
table.string('email', 64).notNullable().comment('E-Mail');
table.string('name', 64).notNullable().comment('Name');
});
];
});
// view_users.js
exports.auto = function(migrator, knex) {
return [
migrator('user_information', (view) => {
// If view.columns() is missing,
// the columns will default to those defined in the 'select()' statement.
view.as(knex('users').select('user_id', 'email', 'name'));
}),
];
});
```
```bash
$ knex-automigrate migrate:auto
```
Migration files are,
```
App
├─ migrations
│ ├─ table_users.js
│ └─ view_users.js
└─ knexfile.js
```
## Dependencies
* [Knex.js](http://knexjs.org)
## License
[MIT License](http://www.opensource.org/licenses/mit-license.php)