import - Que fait le module require npm install dans node.js?
世界只因有你
世界只因有你 2017-06-29 10:09:33
0
1
1125

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

répondre à tous(1)
某草草

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 🎜.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal