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


80

requireJS2.xを使用しています。一部のチュートリアル(および公式ドキュメント)で使用されることがあることがわかりました

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

そして時折

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

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

回答:


86

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

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

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


15
ありがとう:)それはドキュメントに注意する必要があります。コード内のコメントはこれを明確にしません。
マティアスバイエル

私は同意します、それは紛らわしいです(そして「公式の」requirejsページでさえ使用法と例の間に矛盾があります)。それらが同じものであることを知っておくとよいでしょう。
Bil Simser 2015

手段のブラウザでCommonJSを使用して(WebPACKの経由またはbrowserify)そのあなたもアクセスできるrequirejsようrequireTHT状況でローカル変数がすでにあります。これは、Reactコンポーネントで、に追加のスクリプトをロードするのに役立つことがわかりましたcomponentDidMount
サイモンスミス

1
優れたライブラリ、紛らわしいドキュメント。「API」セクションでさえAPIではなく、より「料理本」です。公式ドキュメントよりも開始するのに適したチュートリアルがたくさんあります。
Hal50000 2015年

20

あるrequirejsrequire同じ?

RequireJS 2.1.15以降、requireおよびrequirejsグローバルスペースでは、コンソールで実行できるこのテストから明らかなように、実際には「まったく同じ」です。

> require === requirejs
true

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

ただし、あなたが実行時にdefine(['require'], function (require) {ザ・をrequire関数に渡さ通常、異なるグローバルからrequire

使用する必要があります requirerequirejs

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

グローバルを定義する何か他のものをロードしている場合 requirerequirejs競合を回避するためにグローバルレベルで使用する必要があります。

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


2

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

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

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


1
技術的にはそこに、ちょうど同じです$jQueryしています。フォールバックを提供し、環境がすでに使用している場合に備えて良き市民になることだけrequireです。これは非常にエッジケースであり、使用することをお勧めしますがrequire、必須ではありません-github.com/amdjs/amdjs-api/blob/master/AMD.md#global-variables-
Simon Smith

0

それらはロードされた同じオープンウェブサイトであり、すでに必要です

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.