作者:acChristina | 来源:互联网 | 2023-09-03 08:57
刚刚发现require的module也会影响到后续的require,以moment和moment-timezone举例,也就是说:
/app.js
1 2 3 4 5 6
| var moment = require('moment');
console.log(moment.tz());
// 这样会报错,因为moment.tz()是moment-timezone这个module才有的function
/*
TypeError: moment.tz is not a function
*/ |
但是如果我先require了moment-timezone,后续我再require了moment,npm install moment,我依然可以require('moment')而且这个moment就可以使用moment-timezone的功能,如下
/app.js
1 2 3
| require('moment-timezone')
var moment = require('moment');
console.log(moment.tz()); //moment.utc("2017-06-27T06:59:14.475+00:00") |
我不明白的点是,为什麽require('moment-timezone')之后,即使我没有npm install moment 我还是可以require('moment');而不会报错呢?
这样的node modules是经过什麽设计或有什麽特殊的名词可以造成这样的行为吗?
顺带一提,如果上面的moment-timezone可以这样设计,假设我今天发佈了一个叫做noname的module在npm上供人使用,只要程序上先执行了require('noname'); ,是否可以改了后续require('express')这个module的return内容,做到类似以下的作用:
1 2 3
| require('noname');
var express = require('express');
express.thisIsMyExpress();//这是被我换过的express module |