Skip to content

tabuckner/node-liquibase

 
 

Repository files navigation

Website Website Twitter Follow npm npm GitHub repo size

Use Node.js and databases? Want to do smart architecture decisions? Do not invent wheel, use Liquibase. Liquibase is an open-source database-independent library for tracking, managing and applying database schema changes.

Installation

There is an easy way to integrate Liquibase power to Node.js application. All you need is npm package.

$ npm install --save liquibase

Usage

Liquibase support rich pool of commands to keep your database up-to-date, like update, rollback, diff check out full list here: https://docs.liquibase.com/commands/home.html.

CLI

You can use this NPM package as a CLI tool under the namespace node-liquibase if you wish.

Example

Bundled Liquibase Executable
node-liquibase
--changeLogFile="/examples/change-log-examples/postgreSQL/changelog.xml"
--url="jdbc:postgresql://localhost:5432/postgres"
--username="yourusername"
--password="yoursecurepassword"
--classpath="/Users/taylor/Dev/Liquibase/hackathons/node-liquibase/drivers/postgresql-42.2.8.jar"
status
Alternative Liquibase Executable
node-liquibase /Users/taylor/Dev/Liquibase/hackathons/node-liquibase/bin/liquibase/liquibase
 --changeLogFile="/examples/change-log-examples/postgreSQL/changelog.xml"
 --url="jdbc:postgresql://localhost:5432/postgres"
 --username="yourusername"
 --password="yoursecurepassword"
 --classpath="/Users/taylor/Dev/Liquibase/hackathons/node-liquibase/drivers/postgresql-42.2.8.jar"
 status

In Your Project Files

TypeScript

import { LiquibaseConfig, Liquibase, POSTGRESQL_DEFAULT_CONFIG } from 'node-liquibase'

const myConfig: LiquibaseConfig = {
	...POSTGRESQL_DEFAULT_CONFIG,
	url: 'jdbc:postgresql://localhost:5432/node_liquibase_testing',
	username: 'yourusername',
	password: 'yoursecurepassword',
}
const instance = new Liquibase(myConfig);

async function doEet() {
	await instance.status();
	// await instance.update();
	// await instance.dropAll();
}

doEet();

JavaScript

From the index.js file adjust "<>" fields accordingly:

const fromLibrary = require('node-liquibase/cjs/index');
const POSTGRESQL_DEFAULT_CONFIG = require('node-liquibase/cjs/constants/defaults/postgresql-default.config').POSTGRESQL_DEFAULT_CONFIG;

const myConfig = {
	changeLogFile: POSTGRESQL_DEFAULT_CONFIG.changeLogFile,
	classpath: POSTGRESQL_DEFAULT_CONFIG.classpath,
	url: 'jdbc:postgresql://localhost:5432/node_liquibase_testing',
	username: 'yourusername',
	password: 'yoursecurepassword',
}

const instance = new fromLibrary.Liquibase(myConfig);

doEet();


async function doEet() {
	await instance.status();
	// await instance.update();
	// await instance.dropAll();
}

Want to help?

This project needs some work on the infrastructure and build tooling side. For now the workflow to test an 'end user ready' version of the project, you'll first need to build/compile the code, and then you can run it using the Node CLI's REPL node path/to/something.js.

There is an issue in path resolution within THIS application code in addition to the complexities in Liquibase Core. Until this is resolved the resolved path for the Liquibase executable will differ between compiled and source code. This will affect your experience if you try to transpile the code on the fly using ts-node. I have not resolved the issue yet.

Build

To build all of the things:

yarn build

Tests

Run tests with:

yarn test

Env Vars

To substitute your own user/pass for a given environment, make a copy of .env.example in root directory as .env and update accordingly.

About

Node.js wrap for Liquibase

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 52.5%
  • TypeScript 30.9%
  • Shell 14.3%
  • Batchfile 2.3%