Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/anywhichway/node-require
An Express addin to export node modules to the client and a supporting CommonJS browser require
https://github.com/anywhichway/node-require
Last synced: about 4 hours ago
JSON representation
An Express addin to export node modules to the client and a supporting CommonJS browser require
- Host: GitHub
- URL: https://github.com/anywhichway/node-require
- Owner: anywhichway
- License: other
- Created: 2015-12-01T13:47:08.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2016-01-27T16:08:57.000Z (almost 9 years ago)
- Last Synced: 2024-08-09T05:52:43.341Z (3 months ago)
- Language: JavaScript
- Size: 24.4 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# node-require
An Express addin to export node modules to the client and a supporting CommonJS browser require.[![Codacy Badge](https://api.codacy.com/project/badge/grade/8f017fdeac66463d98900b4df4fc4de7)](https://www.codacy.com/app/syblackwell/node-require)
[![Code Climate](https://codeclimate.com/github/anywhichway/node-require/badges/gpa.svg)](https://codeclimate.com/github/anywhichway/node-require)# Install
npm install node-require
# Basic Use
In your Node Express app include the following code:
```
var noderequire = require('node-require');// replace , ... with all package names you would like to export to the client
// is an object, currently the only supported property is min:true
// if options.min===true, then a minified version of the package will be loaded if available
noderequire.export(app,__dirname,["",...][,);```
Add this line to the top of an HTML file into which you wish to load node modules on the client:
```
```
You can then require any of the modules you have exported using normal require syntax along with other JavaScript code, e.g.
```
var pkgexport = require('<package name>'); // loads a package, the internals assume anything without a .js extension
for(var key in pkgexport) {
console.log(pkgexport[key]);
};```
For modules designed to create new global objects/constructors, i.e. those packaged with *browserify*, you can also load any exported modules using the script src attribute, e.g.
```
for(var key in MyClass) {
console.log(MyClass[key]);
};```
# Advanced Use
If you add the key *client* to a modules *package.json* file, *node-modules* will use that path to find the file to deliver to the browser. In the case of isomorphic code, this could simply be a bundle created using *browserify*. In the case of non-isomorphic code, this could be the client code required to interact with the services provided by the module on the server. *node-modules* itself is the second type of code base.
# Internals
By convention modules do not have *.js* extensions. *node-require* uses this convention for handling requests. Anything without a *.js* extension is assumed to be a node module and the exports array provided in the *app.js* file is examined. If there is no match, the next Express route is called. If there is a match the module package file is used to resolve to a file name, specified by either *package.main* or *package.client*. If *node-require* is configured to load a minified file, the file name is adjusted to be \.min.js and an attempt to send the file if made. If this fails, an attempt is made with an un-modified file name. If this fails, the next route is called with the error causing the failure.
# Philosophy
*node-require* was developed as an easy way to ensure that you are running the same version of JavaScript code on the client and the server without having to implement a build process or manual steps to copy files.
*node-require* could be extended to kick-off on demand build or file generation processes. For example to fool bots trying to analyze a site a seeded minify/uglify library could be used to regenerate the client side code differently for each request.
# Updates (reverse chronological order)
2016-01-20 v0.0.10 Corrected reference to client code in package.json.
2016-01-20 v0.0.9 Updated README documentation. Swapped in *Smoothie require.js* in place of modified *require1k.js* due to conflicts with *browserified* bundles. *Smoothie require.js* is also far easier to trace through if ever needed. Made modifications to more cleanly load module files from */* tags and better handle missing files. Added the options object for server side configuration.
2016-01-18 v0.0.8 Updated README documentation. Eliminated conflict with browserify by changing key in package.json to be *client:* instead of *browser:*.
2015-12-19 v0.0.7 Add client side console logging for errors
2015-12-19 v0.0.6 Now sends 404 Not Found if package is not exported
2015-12-13 v0.0.5 Codacy driven improvements
2015-11-29 v0.0.4 Initial public commit
# License
## Client Side Code - GNU
Copyright (C) 2013-2015 Flowy Apps GmbH
enhancements to support node-require
Copyright (c) 2016, Simon Y Blackwell, AnyWhichWay All rights reserved.## Server Code - MIT