PhD*_*PhD 11 javascript require
我通常认为这是node.js脚本/模块中的第一行以及phantomJS,casperJS等.我很好奇,如果这是服务器端javascript(SSJS)的常见模式(类似于#includeC/C++或import在Java)或者它是一个像RequireJS或LabJS这样的库被调用这个包含(我还没有机会在实践中使用它)?
例如var http = require('http')或var casper = require('casper').create()
我很好奇这是一个已经成为SSJS 标准化的模式,还是每个库/工具调用现有函数?
请原谅问题的n00b维度,但我想知道其无所不在背后的'为什么':)
voi*_*hos 20
这个require()成语是CommonJS规范的一部分.具体来说,该规范的那部分称为"模块".RequireJS只是CommonJS的一个实现(它通常是一个浏览器端实现 - 事实上,由于浏览器的异步性,它采用了不同的方法).
如果你看一下在CommonJS的网站实现的列表,你会看到的Node.js上市.请注意,它实现了"模块".因此,它就是它的来源 - 它非常内置.
的require在PhantomJS和Node.js的表示正好区别在于没有一个基本模块匹配的相同.尽管fs两者都存在模块,但它们是不同的,并且不提供相同的功能.
require在PhantomJS和Node.js中功能相同 CasperJS建立在PhantomJS之上并使用它的require功能,但也修补它.使用CasperJS,还可以要求模块具有其名称,require('module')而不是require('./module')它是否在同一目录中.
完整矩阵(file.js与执行的脚本位于同一目录中):
| node
| | phantom
| | | casper
| | | | slimer
------------+---+---+---+--------
file | n | n | y | y
./file | y | y | y | y
file.js | n | n | n | n
./file.js | n | n | n | n
PhantomJS也可以像使用node_modules节点一样使用特殊文件夹中定义的模块.它不能使用与PhantomJS中不存在的模块具有依赖关系的实际节点模块.
module.exports = function(){
return {
someKey: [1,2,3,4],
anotherKey: function(){
console.log("module exports works");
}
}
};
Run Code Online (Sandbox Code Playgroud)
exports.someKey = {
innerKey: [1,2,3,4]
};
exports.anotherKey = function(){
console.log("exports works");
};
Run Code Online (Sandbox Code Playgroud)
[
{
"someKey": [ 1,2,3,4 ],
"anotherKey": 3
}
]
Run Code Online (Sandbox Code Playgroud)
var m = require("./m")();
m.anotherKey(); // prints "module exports works"
var e = require("./e");
e.anotherKey(); // prints "exports works"
var a = require("./a");
console.log(a[0].anotherKey); // prints "3"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4247 次 |
| 最近记录: |