convert your component app into duo app
Duo doesn't have any concept of local components.
This tool rewrites your require paths for local components by
analyzing your root component and all your locals and scripts which are listed in your component.json
files.
- root component should have only one element in the
paths
array - lookup paths of local components will be ignore, only the root component
paths
is used - only files which are listed in the
.scripts
property of your component.json files are analyzed
npm install component2duo
var Converter = require('component2duo');
var c = new Converter('rootComponentPath', Converter.ABSOLUTE, {simulate:true});
var result = c.start();
console.log(result);
- path to the root component.json
- mode Converter.ABSOLUTE or Converter.RELATIVE
- opt options object
- simulate - boolean, if true: don't rewrite changes to filesystem, return the changes as result of
start()
, default false - debug - boolean, if true: print each require path transformation to stdout
- localManifest filename of the local components manifest, default
component.json
- simulate - boolean, if true: don't rewrite changes to filesystem, return the changes as result of
Converter.ABSOLUTE will rewrite require paths relative to the root component with a leading slash, for instance: /lib/local
.
Converter.RELATIVE will rewrite require paths relative to each local component, for instance: ../local
.
node_modules/.bin/component2duo ~/myApp/component.json 0 true
- first argument: path to root component
- second argument: mode; 0 = ABSOLUTE, 1 = RELATIVE
- third argument (optional): simulate and print require transformation to stdout
Assume you have this directory structure
myApp
├── component.json
└── lib
├── bar
│ ├── component.json
│ ├── index.js
│ └── qux.js
└── foo
├── component.json
├── index.js
├── script.js
└── sub
└── baz.js
Your root component is located at myApp/component.json
with this content:
{
"name": "myApp",
"paths": ["lib"],
"locals": ["foo"]
}
myApp/foo/component.json
:
{
"locals": ["bar"],
"scripts": [
"index.js",
"script.js",
"sub/baz.js"
],
"main": "index.js"
}
With component you can write require('bar')
in the scripts of foo.
With this tool you can choose if you want to rewrite it into an absolute require('/lib/bar')
or relative require('../bar')
path.
If you checkout this project (and make a npm install
) you can run:
$ ./bin/cli test/fixtures/simple/component.json 0 true
then you get this result:
lib/foo/script.js: 'bar' -> '/lib/bar'
lib/foo/script.js: 'bar/qux' -> '/lib/bar/qux'
git clone https://github.com/timaschew/component2duo.git
cd component2duo
npm install
npm test
Currently I'm not using any generator functions, but I will, so currently just ignore the build-generator
directory. If you don't want use CoffeeScript you can use the build/index.js
.