exports
(module.exports)
review 1.
(1) Server side JavaScript
(2) run on command mode
(3) You need a good Text editor
(1) NodeJS package manager
(2) npm install <package-name>
> npm install jquery
review 2.
var $ = require('jquery');
$.ajax({
url:'/myapi',
method:'GET'
}).success(functon(data){
// do somthing ...
});
var foo = require('package-name');
-
the way to using NodeJS package in JS file.
review 3.
// example.js
var $ = require('jquery');
$.ajax({
url:'/myapi',
method:'GET'
}).success(functon(data) {
});
<scirpt src="js/jquery.js">
<script>
$.ajax({
url:'/myapi',
method:'GET'
}).success(functon(data) {
});
</script>
- HTML
- Node.js
<scirpt src="js/jquery.js">
<script src="js/mySum.js">
<script>
var result = mySum(2, 3);
</script>
- HTML
var mySum = function(a, b) {
return a + b;
};
- mySum.js
// result => 5
var mySum = function(a, b) {
return a + b;
};
- mySum.js
- Node.js
var $ = require('jquery');
var mySum = require('./mySum.js');
var result = mySum(2, 3);
var result = mySum(2, 3);
^
TypeError: object is not a function
var mySum = function(a, b) {
return a + b;
};
module.exports = mySum;
- mySum.js
- Node.js
var $ = require('jquery');
var mySum = require('./mySum.js');
var result = mySum(2, 3);
// result => 5
module.exports
- Your code uses require to include modules.
- Modules use exports to make things available.
- Node.JS - a Common.JS Module Implementation
var Sum = function(a, b) {
return a + b;
};
var Diff = function(a, b) {
return a - b;
};
var myFunc = {};
myFunc.mySum = Sum;
myFunc.myDiff = Diff;
module.exports = myFunc;
- myFunc.js
var result1 = myFunc.mySum(2, 3);
// result1 => 5
var result2 = myFunc.myDiff(2, 3);
// result2 => -1
var myFunc = require('./myFunc.js');
- main.js
Module Pattern
CommonJS
AMD
EcmaScript6
(EcmaScirpt2015)
(ES Harmony)
- Node.js
- back-end
- Require.js
- front-end
- standard
- native in browser (not yet)
- front-end & back-end
Why module pattern is important ?
JavaScript has no Class (before ES6)
decrease global variables.
dependency is a big problem in front-end.
<scirpt src="js/jquery.js">
<scirpt src="js/jquery-plugin-1.js">
<scirpt src="js/jquery-plugin-2.js">
<scirpt src="js/jquery-plugin-3.js">
<script>
$('#myDiv').jqPlugin3();
</script>
if this code work well...
<scirpt src="js/jquery.js">
<scirpt src="js/jquery-plugin-1.js">
<scirpt src="js/jquery-plugin-2.js">
<scirpt src="js/jquery-plugin-3.js">
<script>
$('#myDiv').jqPlugin3();
</script>
what if jquery.js is missing... or rename...
<scirpt src="js/jquery.js">
<scirpt src="js/jquery-plugin-1.js">
<scirpt src="js/jquery-plugin-2.js">
<scirpt src="js/jquery-plugin-3.js">
<scirpt src="js/jquery-plugin-3.js">
<script>
$('#myDiv').jqPlugin3();
</script>
or missing some dependency plugin.
<scirpt src="js/jquery.js">
<scirpt src="js/jquery-plugin-3.js">
<scirpt src="js/jquery-plugin-1.js">
<scirpt src="js/jquery-plugin-2.js">
<script>
$('#myDiv').jqPlugin3();
</script>
or the dependency ordering is wrong....
<scirpt src="js/jquery.js">
<scirpt src="js/jquery-plugin-3.js">
<scirpt src="js/jquery-plugin-1.js">
<scirpt src="js/jquery-plugin-2.js">
<script src="js/myApp.js>"
<script>
$('#myDiv').jqPlugin3();
$('.foo').myApp();
</script>
or add some custom js-file
how can I know its dependency?
rename:jquery-myApp.js
jquery-pluging-3-myApp.js
var $ = require('jquery');
var jqPlugin3 = require('jquery-plugin-3');
var myApp = require('./myApp.js');
$('#myDiv').jqPlugin3();
$('.foo').myApp();
using module pattern
// jquery-plugin-3
var jqPlugin1 = require('jqPlugin1');
var jqPlugin2 = require('jqPlugin2');
var jqPlugin3 = function() {
jqPlugin1().doSomething();
jqPlugin2().doSomething();
}
module.exports = jqPlugin3;
// myApp.js
var $ = require('jquery');
var myApp = function() {
$().doSomething();
}
module.exports = myApp;
- main.js
var $ = require('jquery');
var jqPlugin3 = require('jquery-plugin-3');
var myApp = require('./myApp.js');
$('#myDiv').jqPlugin3();
$('.foo').myApp();
- main.js
<scirpt src="js/main.js">
- in HTML, we only one JS-file... perfect!!!
How about using it in HTML
<scirpt src="js/jquery.js">
<scirpt src="js/jquery-plugin-1.js">
<scirpt src="js/jquery-plugin-2.js">
<scirpt src="js/jquery-plugin-3.js">
<script src="js/myApp.js>"
<script>
$('#myDiv').jqPlugin3();
$('.foo').myApp();
</script>
<scirpt src="js/main.js">
before
after
HTML got superbly clear !!!
require & exports are part of CommonJS,
it works on Node.js ( back-end )
browser don't support CommonJS module pattern...
But... not work...
(1) using AMD ( Requre.js )
(2) compile CommonJS as front-end JavaScript.
(3) wait for ES6 in browser.
thus...
to be continued...
exports
By Jayson Chiang
exports
NodeJS basic II - exports
- 524