[ALOY-879] Alloy: Properly expose Alloy NPM package as a CommonJS module
GitHub Issue | n/a |
---|---|
Type | New Feature |
Priority | High |
Status | Open |
Resolution | Unresolved |
Affected Version/s | n/a |
Fix Version/s | Alloy 2.0.0 |
Components | Tooling |
Labels | alloy, tooling |
Reporter | Fokke Zandbergen |
Assignee | Unknown |
Created | 2013-11-11T12:08:27.000+0000 |
Updated | 2018-03-07T22:26:07.000+0000 |
Description
Right now, the Alloy NPM Why support
Alloy is very well organised, with different utilities that are also of interest for stand-alone contributions like now promoted with the pluggable Titanium CLI in 3.2 master. For example:
*
package.json
points to ./bin/alloy
for the executable and ./Alloy/alloy
for the main entry point when required externally using require('alloy');
:
"bin": {
"alloy": "./bin/alloy"
},
"scripts": {
"test": "jake test:all"
},
"main": "./Alloy/alloy",
However, under the hood the executable simply requires ./Alloy/alloy
, which is not exporting any methods but instead just uses commander to manage the CLI. This makes an external require of Alloy absolutely useless.
Why support require
?
Alloy is very well organised, with different utilities that are also of interest for stand-alone contributions like now promoted with the pluggable Titanium CLI in 3.2 master. For example:
* ./Alloy/commands/compile/styler
for reading TSS files etc.
* ./Alloy/utils.js
for XML view manipulation, searching for widgets etc.
* ./Alloy/tiapp.js
for reading and manipulating tiapp.xml
.
It would be nice if these would be available externally, e.g.:
var styler = require('alloy').styler;
style = styler.loadStyle('my.tss');
How?
The easy way would just to add new file and change themain
property in the package.json
to point to it, containing e.g.:
exports.styler = require('./commands/compile/styler.js');
exports.utils = require('./utils.js');
exports.tiapp = require('./tiapp.js');
But I'd even recommend restructuring the files a little. Move the code currently in ./Alloy/alloy.js
to ./bin/alloy
or create a new ./Alloy/cli.js
and require this from the executable. Then keep alloy.js
as the entry point for external require's.
No comments