fixturify-project
v7.1.3
Published
[![npm version](https://badge.fury.io/js/fixturify-project.svg)](https://badge.fury.io/js/fixturify-project) [![CI](https://github.com/stefanpenner/node-fixturify-project/workflows/CI/badge.svg)](https://github.com/stefanpenner/node-fixturify-project/acti
Downloads
1,864,366
Keywords
Readme
node-fixturify-project
When implementing JS build tooling it is common to have complete projects as fixture data. Unfortunately fixtures committed to disk can be somewhat hard to maintain and augment.
Basic Usage
npm install --save-dev fixturify-project
const { Project } = require('fixturify-project');
const project = new Project('rsvp', '3.1.4', {
files: {
'index.js': 'module.exports = "Hello, World!"',
},
});
project.addDependency('mocha', '5.2.0');
project.addDependency('chai', '5.2.0');
project.pkg; // => the contents of package.json for the given project
project.files; // => read or write the set of files further
// if you don't set this, a new temp dir will be made for you when you write()
project.baseDir = 'some/base/dir/';
await project.write();
// after write(), you can read project.baseDir even if you didn't set it
expect(fs.existsSync(join(project.baseDir, 'index.js'))).to.eql(true);
The above example produces the following files (and most importantly the appropriate file contents:
some/base/dir/package.json
some/base/dir/index.js
some/base/dir/node_modules/mocha/package.json
some/base/dir/node_modules/chai/package.json
Nesting Dependencies
addDependency
returns another Project
instance, so you can nest arbitrarily deep:
const { Project } = require('fixturify-project');
let project = new Project('rsvp');
let a = project.addDependency('a');
let b = a.addDependency('b');
let c = b.addDependency('c');
await project.write();
Which produces:
$TMPDIR/xxx/package.json
$TMPDIR/xxx/index.js
$TMPDIR/xxx/node_modules/a/package.json
$TMPDIR/xxx/node_modules/a/node_modules/b/package.json
$TMPDIR/xxx/node_modules/b/node_modules/b/node_modules/c/package.json
Linking to real dependencies
Instead of creating all packages from scratch, you can link to real preexisting packages. This lets you take a real working package and modify it and its dependencies and watch how it behaves.
const { Project } = require('fixturify-project');
let project = new Project();
let a = project.addDependency('a');
// explicit target
project.linkDependency('b', { target: '/example/b' });
// this will follow node resolution rules to lookup "c" from "../elsewhere"
project.linkDependency('c', { baseDir: '/example' });
// this will follow node resolution rules to lookup "my-aliased-name" from "../elsewhere"
project.linkDependency('d', { baseDir: '/example', resolveName: 'my-aliased-name' });
await project.write();
Produces:
$TMPDIR/xxx/package.json
$TMPDIR/xxx/index.js
$TMPDIR/xxx/node_modules/a/package.json
$TMPDIR/xxx/node_modules/a/node_modules/b -> /example/b
$TMPDIR/xxx/node_modules/b/node_modules/c -> /example/node_modules/c
$TMPDIR/xxx/node_modules/b/node_modules/d -> /example/node_modules/my-aliased-name
When constructing a whole Project from a directory, you can choose to link all dependencies instead of copying them in as Projects:
let project = Project.fromDir('./sample-project', { linkDeps: true });
project.files['extra.js'] = '// stuff';
await project.write();
This will generate a new copy of sample-project, with symlinks to all its original dependencies, but with "extra.js" added.
By default, linkDeps
will only link up dependencies
(which is appropriate
for libraries). If you want to also include devDependencies
(which is
appropriate for apps) you can use linkDevDeps
instead.
API
Project
Kind: global class
- node-fixturify-project
- Basic Usage
- API
- Project
- project.baseDir
- project.baseDir
- project.name : string
- project.name
- project.version : string
- project.version
- project.mergeFiles(dirJSON)
- project.write(dirJSON?)
- project.addDependency() ⇒
- project.addDevDependency() ⇒
- project.removeDependency(name)
- project.removeDevDependency(name)
- project.linkDependency(name)
- project.linkDevDependency(name)
- project.dependencyProjects() ⇒
- project.devDependencyProjects() ⇒
- project.clone() ⇒
- project.dispose()
- Project.fromDir(baseDir, opts) ⇒
project.baseDir
Kind: instance property of Project
| Param | Description | | --- | --- | | dir | The directory path. |
project.baseDir
Kind: instance property of Project Read only: true
project.name : string
Kind: instance property of Project
project.name
Kind: instance property of Project
project.version : string
Kind: instance property of Project
project.version
Kind: instance property of Project
project.mergeFiles(dirJSON)
Kind: instance method of Project
| Param | Description | | --- | --- | | dirJSON | An object containing a directory representation to merge. |
project.write(dirJSON?)
Kind: instance method of Project
| Param | Description | | --- | --- | | dirJSON? | An optional object containing a directory representation to write. |
project.addDependency() ⇒
Kind: instance method of Project Returns:
project.addDevDependency() ⇒
Kind: instance method of Project Returns:
project.removeDependency(name)
Kind: instance method of Project
| Param | Description | | --- | --- | | name | The name of the dependency to remove. |
project.removeDevDependency(name)
Kind: instance method of Project
| Param | Description | | --- | --- | | name | The name of the devDependency to remove. |
project.linkDependency(name)
Kind: instance method of Project
| Param | Description | | --- | --- | | name | The name of the dependency to link. |
project.linkDevDependency(name)
Kind: instance method of Project
| Param | Description | | --- | --- | | name | The name of the dependency to link. |
project.dependencyProjects() ⇒
Kind: instance method of Project Returns:
project.devDependencyProjects() ⇒
Kind: instance method of Project Returns:
project.clone() ⇒
Kind: instance method of Project Returns:
project.dispose()
Kind: instance method of Project
Project.fromDir(baseDir, opts) ⇒
Kind: static method of Project Returns:
| Param | Description | | --- | --- | | baseDir | The base directory to read the project from. | | opts | An options object. | | opts.linkDeps | Include linking dependencies from the Project's node_modules. | | opts.linkDevDeps | Include linking devDependencies from the Project's node_modules. |