是';需要(…)和#x27;公共javascript模式还是库函数?

是';需要(…)和#x27;公共javascript模式还是库函数?,javascript,require,Javascript,Require,我通常在node.js脚本/模块以及phantomJS、casperJS等中发现这是第一行。我很好奇,这是否是服务器端javascript(SSJS)的常见模式(类似于C/C++中的#include,或者Java中的import),或者是一个像RequireJS或LabJS这样的库被调用来包含它(到目前为止,我还没有机会在实践中使用这两种方法) e、 g.var http=require('http')或var casper=require('casper')。create() 我很好奇这是一种

我通常在node.js脚本/模块以及phantomJS、casperJS等中发现这是第一行。我很好奇,这是否是服务器端javascript(SSJS)的常见模式(类似于C/C++中的
#include
,或者Java中的
import
),或者是一个像RequireJS或LabJS这样的库被调用来包含它(到目前为止,我还没有机会在实践中使用这两种方法)

e、 g.
var http=require('http')
var casper=require('casper')。create()

我很好奇这是一种已经成为SSJS标准化的模式,还是每个库/工具都调用现有函数

请原谅这个问题的n00b维度,但我想知道它无处不在背后的“原因:)

这个
require()
习惯用法是一个名为的规范的一部分。具体来说,规范的这一部分称为“模块”。只是CommonJS的一个实现(它通常是浏览器端实现——事实上,由于浏览器的异步特性,它需要一段时间)


如果您查看CommonJS站点上的实现列表,您会发现。请注意,它实现了“模块”。因此,这就是它的来源——它是非常内置的。

PhantomJS和Node.js中的
require
的意思完全相同,只是没有一个基本模块匹配。尽管这两个模块都有
fs
模块,但它们是不同的,并且提供的功能不相同

require
在PhantomJS和Node.js中的功能相同。CasperJS构建在PhantomJS之上,使用其
require
功能,但也对其进行了修补。使用CasperJS,如果模块位于同一目录中,还可以要求模块使用其名称,例如
require('module')
,而不是
require('./module')

完整矩阵(file.js与执行的脚本位于同一目录中):

e、 js(用于js的所有其他内容) a、 json(任意json) script.js
其他人给出了很好的技术答案,但我想提供一个超级简化的答案,以防万一它对将来的人有所帮助。“require”本身并不是一个库,但在需要访问模块(库和框架等)时使用它。所以它不像“require”是最流行的库或类似的东西:)

顺便说一句,很多旧代码要求您仍然使用“require”(注意,我避免说它是必需的),但是使用“import”一词开发了新的语法(我想从2015年开始使用ES6)。我肯定更喜欢import,它用于完全相同的目的,尽管它看起来确实有点不同

无论如何,正如其他人提到的,“需要”意味着您需要(即访问)一个模块。但这并不一定意味着您可以访问库或框架。。。实际上,您可能正在访问您自己创建的另一个页面!例如,您可能会看到:

 - var Comment = require("./models/comment");
这仅仅意味着“允许我访问我在models目录中创建的注释文件”。这也被认为是一个模块

所以你可以这样想。。。您需要一些代码(或导入它)。。。这样你就可以用你想要的方式利用它。如果你不需要/导入它,你就不会得到它

module.exports = function(){
    return {
        someKey: [1,2,3,4],
        anotherKey: function(){
            console.log("module exports works");
        }
    }
};
exports.someKey = {
    innerKey: [1,2,3,4]
};

exports.anotherKey = function(){
    console.log("exports works");
};
[
    {
        "someKey": [ 1,2,3,4 ],
        "anotherKey": 3
    }
]
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"
 - var Comment = require("./models/comment");