web-dev-qa-db-ja.com

RequireJS:「requirejs」と「require」関数の違い

RequireJS 2.xを使用しています。一部のチュートリアル(および公式ドキュメント)では、

requirejs.config({ [...] });
requirejs(["module"]) ...

そして時折

require.config({ [...] });
require(["module"]) ...

これらの2つの関数(requirejsとrequirejs)に違いはありますか?私はドキュメントでそれについての言葉を見つけることができませんでした。 :(

76
Matthias Bayer

それらはまったく同じです。

その理由は、一部の環境には既にrequireが存在する可能性があるためです。その場合、RequireJSはそれを上書きせず、requirejsを介したライブラリの使用を許可します

このコミットを参照してください- https://github.com/jrburke/requirejs/commit/be45948433b053921dc6a6a57bf06d04e13b3b39

84
Simon Smith

requirejsrequireは同じですか?

RequireJS 2.1.15の時点で、コンソールで実行できるこのテストで証明できるように、グローバルスペースのrequirerequirejsは実際に「まったく同じ」です。

_> require === requirejs
true
_

テストがtrueを返すことは、それらがまったく同じ関数オブジェクトであることを示しています。これらは、類似または同一のコードを持つ2つの関数ではありません。それらは同じオブジェクト、期間です。

ただし、define(['require'], function (require) {を実行すると、関数に渡されるrequireは通常、グローバルrequiredifferentになります。

requireまたはrequirejsを使用する必要がありますか?

場合によります。 RequireJSはAMDローダーですが、町で唯一のローダーではありません。 AMD spec に100%準拠するコードを書きたい場合は、コードを使用する人がコードを変更せずに好きなローダーを使用できるようにするには、グローバルレベルでrequireを使用する必要があります、requirejsはRequireJSに固有であるため。別のAMDローダーでは定義されません。 AMDの仕様ではrequireは定義されていますが、requirejsは定義されていません。

グローバルrequireを定義する他の何かをロードする場合、競合を避けるためにグローバルレベルでrequirejsを使用する必要があります。

モジュール内では、常にdefineを使用してrequireへの参照を取得します。グローバルスペースに競合があるかどうかに関係なく、これを行う必要があります。

19
Louis

確かに、それらは「まったく同じ」かもしれません。次に、一方を使用する理由と他方を使用する理由に焦点を当てましょう...

不明確なのは、「ベストプラクティス」と見なされるべきものです。requirejsが「一部の環境に既にrequireがある場合」という追加の保証を提供する場合、requirejs関数を使用して常にrequire構成を定義することは得策ではありませんrequire関数よりも?

また、考えられないことが起こり、問題の環境に「require」がすでに定義されているだけでなく、「requirejs」も定義されている場合はどうなりますか?つまり、requirejsjsも必要だということですか?等々...?

2
Jazimov

ロード済みのSame Open Webサイトは既に必要です

次にChromeコンソールを開きます

コンソールでrequireと入力し、Enterを押します

コンソールでrequirejsと入力し、Enterキーを押します

異なる名前の同じ関数であることがわかります