Rumah > Soal Jawab > teks badan
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
某草草2017-06-29 10:11:33
require('moment-timezone')
之后,即使我没有npm install moment
我还是可以require('moment')
tetapi tiada ralat dilaporkan? Lihat moment-timezone
Pergantungan
$> npm info moment-timezone dependencies
{ moment: '>= 2.9.0' }
Dapat dilihat bahawa moment-timezone
是依赖了moment
的,这表示在安装moment-timezone
时会自动安装moment
bergantung pada moment
, yang bermaksud moment
akan dipasang secara automatik apabila memasang
require('moment-timezone')
会影响后续var moment = require('moment')
2. Kenapa tugasan `moment` dalam
moment-timezone
Lihat
1 //! moment-timezone.js
2 //! version : 0.5.13
3 //! Copyright (c) JS Foundation and other contributors
4 //! license : MIT
5 //! github.com/moment/moment-timezone
6
7 (function (root, factory) {
8 "use strict";
9
10 /*global define*/
11 if (typeof define === 'function' && define.amd) {
12 define(['moment'], factory); // AMD
13 } else if (typeof module === 'object' && module.exports) {
14 module.exports = factory(require('moment')); // Node
15 } else {
16 factory(root.moment); // Browser
17 }
18 }(this, function (moment) {
19 "use strict";
moment-timezone
修改了require('moment')
,众所周知npm
模块是会缓存的,所以后续var moment = require('moment')
Anda boleh melihat pada baris 14 bahawa diubah suai memerlukan('moment')
Seperti yang kita sedia maklum, modul npm
akan dicache, jadi var yang seterusnya. moment = memerlukan(' moment')
terjejas
moment-timezone
Dengan cara ini, mengubah suai modul secara langsung adalah sama seperti mengubah suai pembolehubah global, yang bukan amalan yang baik. Modul