是'要求(..)'常见的javascript模式或库函数
Is 'require(...)' a common javascript pattern or a library function?
我通常在node.js脚本/模块以及phantomJS、casperJS等中发现这是第一行。我很好奇,如果这是服务器端javascript(SSJS)的常见模式(类似于C/C++中的#include
或Java中的import
),还是像RequireJS或LabJS这样的库正在被调用以进行此包含(到目前为止,我还没有机会在实践中使用这两种库)?
例如var http = require('http')
或var casper = require('casper').create()
我很好奇,这是一个已经成为SSJS标准化的模式,还是每个库/工具都调用现有的函数?
请原谅这个问题的n00b维度,但我想知道它无处不在背后的"原因":)
require()
习惯用法是称为CommonJS的规范的一部分。具体来说,规范的这一部分被称为"模块"。RequireJS只是CommonJS的一个实现(它通常是浏览器端的实现——事实上,由于浏览器的异步性质,它采用了不同的方法)。
如果您查看CommonJS站点上的实现列表,您将看到Node.js列表。请注意,它实现了"模块"。因此,这就是它的来源——它是非常内在的。
PhantomJS和Node.js中的require
含义完全相同,不同之处在于没有一个基本模块匹配。尽管两者都有fs
模块,但它们不同,不提供相同的功能。
require
在PhantomJS和Node.js中的功能相同。CasperJS是在Phantom js之上构建的,使用其require
功能,但也对其进行了修补。使用CasperJS,如果在同一目录中,也可能需要一个名称为require('module')
的模块,而不是require('./module')
。
完整矩阵(file.js与执行的脚本位于同一目录中):
|节点||幻影|||casper||||更苗条------------+---+---+---+--------文件|n|n|y|y./file|y|y|y文件.js|n|n|n./file.js|n|n|n
PhantomJS也可以像节点一样使用特殊文件夹node_modules
中定义的模块。它不能使用对PhantomJS中不存在的模块具有依赖关系的实际节点模块。
可能需要的示例:
m.js(用于函数)
module.exports = function(){
return {
someKey: [1,2,3,4],
anotherKey: function(){
console.log("module exports works");
}
}
};
e.js(其他都是js)
exports.someKey = {
innerKey: [1,2,3,4]
};
exports.anotherKey = function(){
console.log("exports works");
};
a.json(任意json)
[
{
"someKey": [ 1,2,3,4 ],
"anotherKey": 3
}
]
script.js
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"
其他人给出了不错的技术答案,但我想提供一个超级简化的答案,以防将来对某人有所帮助。"require"本身不是一个库,但当您想要访问模块(库和框架等)时,它会被使用。因此,"require"并不是最受欢迎的库或类似的东西:)。
顺便说一句,很多旧代码要求您仍然使用"require"(请注意,我避免说它是必需的),但已经使用"import"一词开发了新的语法(我想是2015年的ES6)。我肯定更喜欢import,它的用途完全相同,尽管看起来确实有点不同。
无论如何,正如其他人所提到的,"需要"意味着您需要(即访问)模块。但这并不一定意味着你可以访问库或框架。。。实际上,您可能正在访问自己创建的另一个页面!例如,您可能会看到:
- var Comment = require("./models/comment");
这只是意味着"让我访问我在models目录中创建的注释文件。"这也被认为是一个模块。
所以你可以这样想。。。您需要一些代码(或者您import它)。。。这样你就可以随心所欲地利用它。如果你不需要/导入它,你就不会得到它。
- 初级JavaScript模式
- 什么'这是这个JavaScript模式的名称
- 是'要求(..)'常见的javascript模式或库函数
- 与变量匹配的Javascript模式
- javascript模式下的asp.net网格视图获胜'不要执着于改变索引
- Javascript:模式HREF需要替换
- 用于忽略先前请求响应的前端 JavaScript 模式
- 处理草图在Java中工作,但在JavaScript模式下不工作
- 插件的 JavaScript 模式
- HTML Javascript 模式弹出窗口,具有自动关闭功能
- 如何正确选择JavaScript模式
- 如何在 Emacs 的 javascript 模式下设置 2 个空格缩进
- 它是什么类型的Javascript模式
- 处理草图在 JavaScript 模式下不起作用
- JavaScript 模式,用于确定某人何时在页面上选择文本
- 对这个javascript模式感到困惑
- JavaScript模式弹出赢得'不起作用
- 使用WADIR点击javascript模式对话框弹出窗口
- Javascript模式资源
- 这两种JavaScript模式的优缺点是什么