grunt-nodeify v0.1.1
grunt-nodeify
Convert js files to node modules by executing the code in the files and linking each function/objects created in the global scope.
/!\ Caution with the js files you pass to the task, I use vm.runInContext(code, context, filename) and it effectively executes the js code. I don't know how it is sandboxed, it might run dangerous code.
/!\ It is a fast coding draft
Getting Started
This plugin requires Grunt ~0.4.2
If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
npm install grunt-nodeify --save-dev
Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
grunt.loadNpmTasks('grunt-nodeify');
The "nodeify" task
Overview
In your project's Gruntfile, add a section named nodeify
to the data object passed into grunt.initConfig()
.
grunt.initConfig({
nodeify:{
ex:{
files:[{
src: ['fixtures/ex1.js', 'fixtures/ex2.js'],
dest: 'node/'
}]
}
}
});
Usage Examples
In this example (see unit test), nodeify will convert ex1.js and ex2.js by adding module.export and requires node instructions
fixtures/ex1.js
var ex1 = {
p : function(){
return 'p';
}
};
var ex11 = function(){
return 'ex11';
};
fixtures/ex2.js
var ex2 = {
func: function(){
return 'func';
},
p: function(){
return ex1.p();
}
};
var ex21 = 'ex21' + ex11();
After nodeify:
node/ex1.js
var ex1 = {
p : function(){
return 'p';
}
};
var ex11 = function(){
return 'ex11';
};
module.exports = {
ex11: ex11,
ex1: ex1
};
node/ex2.js
var ex11 = require("./ex1.js").ex11;
var ex1 = require("./ex1.js").ex1;
var ex2 = {
func: function(){
return 'func';
},
p: function(){
return ex1.p();
}
};
var ex21 = 'ex21' + ex11();
module.exports = {
ex2: ex2,
ex11: ex11,
ex1: ex1,
ex21: ex21
};
Each file of a target is linked with the others depending the order. If you don't want a file to export something, create a second target. Every object in the global scope is exported..