11

私は通常、これをnode.jsスクリプト/モジュールおよびphantomJS、casperJSなどの最初の行として見つけます。これがサーバーサイドjavascript(SSJS)の一般的なパターンであるかどうか(#includeC /C++またはimportJavaで)または、この包含のために呼び出されているのはRequireJSやLabJSのようなライブラリですか(どちらも実際に使用する機会はまだありません)?

var http = require('http')またはvar casper = require('casper').create()

これがSSJSで標準化されたパターンなのか、それともすべてのライブラリ/ツールが既存の関数を呼び出すのか、興味がありますか?

質問のn00bディメンションはご容赦ください。ただし、その遍在の背後にある「理由」を知りたいのですが:)

4

3 に答える 3

20

このイディオムは、 CommonJSrequire()として知られる仕様の一部です。具体的には、仕様のその部分は「モジュール」と呼ばれます。RequireJSはCommonJSの実装の1つにすぎません(通常はブラウザー側の実装です。実際、ブラウザーの非同期性のため、異なるアプローチを採用しています)。

CommonJSサイトの実装のリストを見ると、Node.jsがリストされていることがわかります。'Modules'を実装していることに注意してください。したがって、それはそこから来ています-それは非常に組み込まれています。

于 2012-07-18T23:39:29.153 に答える
8

PhantomJSとNode.jsのrequireはまったく同じ意味ですが、どの基本モジュールも一致しないという違いがあります。モジュールは両方に存在しfsますが、それらは異なり、同じ機能を提供しません。

requirePhantomJSとNode.jsで機能的に同じです。CasperJSはPhantomJSの上に構築され、そのrequire機能を使用しますが、パッチも適用します。CasperJSを使用すると、同じディレクトリにある場合require('module')の代わりに、などの名前のモジュールを要求することもできます。require('./module')

完全なマトリックス(file.jsは実行されたスクリプトと同じディレクトリにあります):

            | ノード
            | | ファントム
            | | | キャスパー
            | | | | スライマー
------------ + --- + --- + --- + --------
ファイル| 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に存在しないモジュールに依存する実際のノードモジュールを使用することはできません。

必要なものの例:

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"
于 2014-12-13T11:16:14.460 に答える
0

他の人は素晴らしい技術的な答えを出しましたが、将来誰かに役立つ場合に備えて、非常に単純化された答えを提供したいと思いました。「require」自体はライブラリではありませんが、アクセスモジュール(ライブラリやフレームワークなど)が必要な場合に使用されます。したがって、「require」が最も人気のあるライブラリなどではありません:)。

ちなみに、古いコードの多くは、引き続き「require」を使用する必要があります(必須とは言わないように注意してください)が、「import」という単語を使用して新しい構文が開発されました(ES6では2015年からだと思います)。私は間違いなくインポートを好みます、そしてそれは少し異なって見えますが、まったく同じ目的で使用されます。

とにかく、他の人が述べたように、「必要」とは、モジュールを必要としている(つまりアクセスしている)ことを意味します。しかし、それは必ずしもライブラリフレームワークにアクセスできることを意味するわけではありません...実際には自分で作成した別のページにアクセスできる可能性があります。たとえば、次のように表示されます。

 - var Comment = require("./models/comment");

これは、「 modelsディレクトリ内に作成したコメントファイルへのアクセスを許可する」という意味です。これもモジュールと見なされます。

だからあなたはそれをこのように考えることができます...あなたはそれをあなたが望むように利用できるようにいくつかのコードを必要とします(またはあなたはそれをインポートします)...。あなたがそれを必要としない/インポートしなければ、あなたはそれを手に入れることができません。

于 2017-05-08T07:20:15.213 に答える