私は今、require モジュールが後続の require にも影響を与えることを発見しました。例として moment と moment-timezone を取り上げます。つまり、
/app.js
リーリーしかし、最初に moment-timezone を要求し、次に npm install moment を要求した場合でも、引き続き require('moment') することができ、この moment は次のように moment-timezone の関数を使用できます。
/app.jsリーリー
私が理解できないのは、npm install moment がない場合でも、require('moment-timezone') の後、エラーを報告せずに require('moment'); できるのはなぜですか?このようなノード モジュールの設計はどのようなものですか、またはそのような動作を引き起こす可能性のある特別な用語はありますか?
リーリー
1.
require('moment-timezone')
之后,即使我没有npm install moment
我还是可以require('moment')
なのにエラーが報告されないのはなぜですか?依存関係を表示
moment-timezone
リーリーは
moment
に依存していることがわかります。つまり、moment
はmoment-timezone
是依赖了moment
的,这表示在安装moment-timezone
时会自动安装moment
のインストール時に自動的にインストールされるため、別途インストールしなくても使用できます。2.
に `moment` が割り当てられているのはなぜですかrequire('moment-timezone')
会影响后续var moment = require('moment')
ソースコードを見る
moment-timezone
リーリー 14 行目で、require('moment')
が変更されていることがわかります。ご存知のとおり、npm
モジュールはキャッシュされるため、後続のvar moment = require(' moment')
が影響を受けますちなみに、モジュールを直接変更することはグローバル変数を変更することと同じであり、良い習慣ではありません。ここの
moment-timezone
修改了require('moment')
,众所周知npm
模块是会缓存的,所以后续var moment = require('moment')
モジュールは基本的に `moment` モジュールのパッチであり、特殊なケースです。