cari

Rumah  >  Soal Jawab  >  teks badan

import - Apakah yang memerlukan modul pemasangan npm dalam node.js lakukan?

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
世界只因有你世界只因有你2707 hari yang lalu1111

membalas semua(1)saya akan balas

  • 某草草

    某草草2017-06-29 10:11:33

    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

    balas
    0
  • Batalbalas