Saya baru sahaja mendapati bahawa modul memerlukan juga akan mempengaruhi keperluan berikutnya, mengambil momen dan zon waktu momen sebagai contoh, iaitu:
/app.js
var moment = require('moment');
console.log(moment.tz());
// 这样会报错,因为moment.tz()是moment-timezone这个module才有的function
/*
TypeError: moment.tz is not a function
*/
Tetapi jika saya memerlukan momen-zon dahulu, dan kemudian memerlukan momen, npm install moment, saya masih boleh memerlukan('moment') dan momen ini boleh menggunakan fungsi moment-timezone, seperti berikut
/app.js
require('moment-timezone')
var moment = require('moment');
console.log(moment.tz()); //moment.utc("2017-06-27T06:59:14.475+00:00")
Apa yang saya tidak faham ialah mengapa selepas memerlukan('moment-timezone'), walaupun saya tidak mempunyai momen pemasangan npm, saya masih boleh memerlukan('moment') tanpa melaporkan ralat?
Apakah reka bentuk modul nod tersebut atau adakah terdapat sebarang istilah khas yang boleh menyebabkan kelakuan sedemikian?
Sebenarnya, jika zon waktu di atas boleh direka bentuk seperti ini, katakan saya mengeluarkan modul yang dipanggil noname untuk digunakan oleh orang pada npm hari ini selagi require('noname' dilaksanakan dalam program dahulu, boleh ia akan ditukar? Kandungan pulangan modul memerlukan('express') seterusnya akan mempunyai kesan yang serupa dengan yang berikut:
require('noname');
var express = require('express');
express.thisIsMyExpress();//这是被我换过的express module
1. Mengapa
require('moment-timezone')
之后,即使我没有npm install moment
我还是可以require('moment')
tetapi tiada ralat dilaporkan?Lihat
moment-timezone
PergantunganDapat dilihat bahawa
, jadi ia boleh digunakan tanpa memasangnya secara berasingan.moment-timezone
是依赖了moment
的,这表示在安装moment-timezone
时会自动安装moment
bergantung padamoment
, yang bermaksudmoment
akan dipasang secara automatik apabila memasangrequire('moment-timezone')
会影响后续var moment = require('moment')
2. Kenapa tugasan `moment` dalammoment-timezone
Lihatmoment-timezone
修改了require('moment')
,众所周知npm
模块是会缓存的,所以后续var moment = require('moment')
Anda boleh melihat pada baris 14 bahawa diubah suaimemerlukan('moment')
Seperti yang kita sedia maklum, modulnpm
akan dicache, jadivar yang seterusnya. moment = memerlukan(' moment')
terjejasmoment-timezone
Dengan cara ini, mengubah suai modul secara langsung adalah sama seperti mengubah suai pembolehubah global, yang bukan amalan yang baik. Modul