recherche

Maison  >  Questions et réponses  >  le corps du texte

import - Que fait le module require npm install dans node.js?

Je viens de découvrir que le module require affectera également les require suivants, en prenant comme exemples le moment et le moment-fuseau horaire, c'est-à-dire :

/app.js

var moment = require('moment');
console.log(moment.tz()); 
// 这样会报错,因为moment.tz()是moment-timezone这个module才有的function
/*
TypeError: moment.tz is not a function
*/

Mais si j'ai d'abord besoin d'un moment-fuseau horaire, puis d'un moment, npm install moment, je peux toujours exiger('moment') et ce moment peut utiliser la fonction moment-fuseau horaire, comme suit

/app.js

require('moment-timezone')
var moment = require('moment');
console.log(moment.tz()); //moment.utc("2017-06-27T06:59:14.475+00:00")

Ce que je ne comprends pas, c'est pourquoi après require('moment-timezone'), même si je n'ai pas npm install moment, je peux toujours require('moment');
Quelle est la conception de ces modules de nœuds ou existe-t-il un terme spécial pouvant provoquer un tel comportement ?

À propos, si le fuseau horaire ci-dessus peut être conçu comme ceci, supposons que j'ai publié un module appelé noname que les gens peuvent utiliser sur npm aujourd'hui, tant que require('noname'); doit-il être modifié ? Le contenu de retour du module require('express') suivant aura un effet similaire à celui-ci :

require('noname');
var express = require('express');
express.thisIsMyExpress();//这是被我换过的express module
世界只因有你世界只因有你2746 Il y a quelques jours1141

répondre à tous(1)je répondrai

  • 某草草

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

    1. Pourquoi require('moment-timezone')之后,即使我没有npm install moment我还是可以require('moment') mais aucune erreur n'est signalée ?

    Afficher moment-timezoneDépendances

    $> npm info moment-timezone dependencies 
    { moment: '>= 2.9.0' }

    On peut voir que moment-timezone是依赖了moment的,这表示在安装moment-timezone时会自动安装moment dépend de moment, ce qui signifie que moment sera automatiquement installé lors de l'installation de

    , il peut donc être utilisé sans l'installer séparément.

    require('moment-timezone')会影响后续var moment = require('moment')2. Pourquoi l'affectation de `moment` est-elle dans

    moment-timezoneVoir

    le code source

      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')Vous pouvez voir à la ligne 14 que

    modified require('moment') Comme nous le savons tous, le module npm sera mis en cache, donc le var suivant. moment = require('moment')est affecté

    moment-timezoneD'ailleurs, modifier directement des modules revient à modifier des variables globales, ce qui n'est pas une bonne pratique. Le module

    ici est essentiellement un patch du module `moment` et constitue un cas particulier 🎜.

    répondre
    0
  • Annulerrépondre