Merge pull request #88 from LorenzGardner/master
Add support for JSON files, and __dirname
This commit is contained in:
@@ -20,9 +20,69 @@ Nexe is a command-line utility that compiles your Node.js application into a sin
|
||||
- Linux / Mac / BSD / Windows
|
||||
- Windows: Python 2.6 or 2.7 (in PATH), Visual Studio 2010 or 2012
|
||||
|
||||
## Caveats
|
||||
##Caveats
|
||||
|
||||
- Doesn't support native modules (yet).
|
||||
### Doesn't support native modules
|
||||
|
||||
- Use the techniques below for working around dynamic require statments to exclude the module from the bundling, and deploy along side the executable in a node_module folder so your app can find it. Note: On windows you may need to have your app be named node.exe if .node file depends on node.
|
||||
|
||||
###Doesn't support dynamic require statments
|
||||
Such As:
|
||||
```
|
||||
var x = require(someVar);
|
||||
```
|
||||
|
||||
In this case nexe won't bundle the file
|
||||
|
||||
```
|
||||
var x;
|
||||
if (someCheck) {
|
||||
x = require("./ver1.js");
|
||||
}
|
||||
else {
|
||||
x = require("./var2.js");
|
||||
}
|
||||
```
|
||||
|
||||
In this case nexe will bundle both files.
|
||||
|
||||
Workarounds:
|
||||
1) for dyanmic requires that you want bundled add the following into your project
|
||||
```
|
||||
var dummyToForceIncludeForBundle = false;
|
||||
if (dummyToForceIncludeForBundle) {
|
||||
require("./loadedDynamicallyLater.js");
|
||||
...
|
||||
}
|
||||
```
|
||||
this will trick the bundler into including them.
|
||||
|
||||
2) for dynamic files getting included that you don't want to be
|
||||
```
|
||||
var moduleName = "./ver2.js";
|
||||
if (someCheck) {
|
||||
moduleName = "./ver1.js";
|
||||
}
|
||||
var x = require(moduleName)
|
||||
```
|
||||
Note: neither file will be bundled.
|
||||
|
||||
Using these two techniques you can change your application code so mdoules are not bundles, and generate a includes.js file as part of your build process so that the right files get bundled for your build configuration.
|
||||
|
||||
### __dirname
|
||||
|
||||
Once the module is budnled it is part of the executable. __dirname is therefore the executable dir (process.execPath). Thus if you put resources on a realtive path from the the executable your app will be able to access them.
|
||||
|
||||
If you had a data file at /dev/myNodeApp/stateManager/handler/data/some.csv
|
||||
and a file at /dev/myNodeApp/stateManager/handler/loader.js
|
||||
```
|
||||
module.exports = fw.readFileSync(path.join(__dirname, "./data/some.csv"));
|
||||
```
|
||||
you would need to deploy some.csv in a sub dir data/ along side your executable
|
||||
|
||||
There are potential use cases for __dirname where the executable path is not the correct substitution, and could result in a silent error (possibly even in a dependciey that you are unaware of).
|
||||
|
||||
Note: __filename will be 'undefined'
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -71,8 +131,3 @@ nexe.compile({
|
||||
});
|
||||
|
||||
````
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+9
-5
@@ -79,15 +79,18 @@ function bundle (input, complete) {
|
||||
var buffer = [loader.toString()];
|
||||
|
||||
|
||||
var dbuffer = [];
|
||||
var dbuffer = [];
|
||||
|
||||
|
||||
for (var i = deps.length; i--;) {
|
||||
var dep = deps[i];
|
||||
|
||||
|
||||
var req = "function (require, module, exports) { \n" + dep.source + "}"
|
||||
|
||||
var req = "function (require, module, exports, __dirname) { \n"
|
||||
if (dep.id.toLowerCase().indexOf(".json", dep.id.length - 5) !== -1) {
|
||||
//this is the result of require("someFile.json"), so we need to export it from the function
|
||||
req += "module.exports = "
|
||||
}
|
||||
req += dep.source + "}";
|
||||
|
||||
dbuffer.push(JSON.stringify(dep.id) + ": ["+req+", "+!!dep.entry+", "+JSON.stringify(dep.deps)+"]")
|
||||
}
|
||||
@@ -104,6 +107,7 @@ function bundle (input, complete) {
|
||||
var loader = function (deps) {
|
||||
|
||||
var darr = [];
|
||||
var dir = global.require("path").dirname(process.execPath);
|
||||
|
||||
for (var key in deps) {
|
||||
darr.push(deps[key]);
|
||||
@@ -117,7 +121,7 @@ var loader = function (deps) {
|
||||
var rdep = deps[dep[2][path]];
|
||||
var exports = rdep ? rdep.module ? rdep.module.exports : initModule(rdep) : global.require(path);
|
||||
return exports;
|
||||
}, dep.module, dep.module.exports);
|
||||
}, dep.module, dep.module.exports, dir);
|
||||
|
||||
return dep.module.exports;
|
||||
}
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@
|
||||
"main": "./lib/index.js",
|
||||
"dependencies": {
|
||||
"async": "~0.2.10",
|
||||
"builtins": "0.0.5",
|
||||
"builtins": "0.0.7",
|
||||
"colors": "~0.6.2",
|
||||
"glob": "~3.2.9",
|
||||
"mkdirp": "~0.3.5",
|
||||
|
||||
Reference in New Issue
Block a user