import - Apakah yang memerlukan modul pemasangan npm dalam node.js lakukan?
世界只因有你
世界只因有你 2017-06-29 10:09:33
0
1
1089

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
世界只因有你
世界只因有你

membalas semua(1)
某草草

1. Mengapa require('moment-timezone')之后,即使我没有npm install moment我还是可以require('moment') tetapi tiada ralat dilaporkan?

Lihat moment-timezonePergantungan

$> 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

, jadi ia boleh digunakan tanpa memasangnya secara berasingan.

require('moment-timezone')会影响后续var moment = require('moment')2. Kenapa tugasan `moment` dalam

moment-timezoneLihat

kod sumber

  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-timezoneDengan cara ini, mengubah suai modul secara langsung adalah sama seperti mengubah suai pembolehubah global, yang bukan amalan yang baik. Modul

di sini pada asasnya adalah tampalan modul `moment` dan merupakan kes khas
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan