全局设置项目的node_modules位置

Kev*_*rke 11 require node.js dtruss

如果我写

var moment = require('moment');
Run Code Online (Sandbox Code Playgroud)

在我的项目中,Node会浪费大量时间查看实际上不包含该文件的位置,如此dtruss输出所示.

       PID/THRD  RELATIVE SYSCALL(args)                 = return
 7079/0x7cf313:   1244530 stat64("/Users/burke/code/api/api/models/node_modules/moment\0", 0x7FFF5FBFE5D8, 0x9)          = -1 Err#2
 7079/0x7cf313:   1244575 stat64("/Users/burke/code/api/api/models/node_modules/moment.js\0", 0x7FFF5FBFE578, 0x9)               = -1 Err#2
 7079/0x7cf313:   1244595 stat64("/Users/burke/code/api/api/models/node_modules/moment.json\0", 0x7FFF5FBFE578, 0x9)             = -1 Err#2
 7079/0x7cf313:   1244612 stat64("/Users/burke/code/api/api/models/node_modules/moment.node\0", 0x7FFF5FBFE578, 0x9)             = -1 Err#2
 7079/0x7cf313:   1244628 stat64("/Users/burke/code/api/api/models/node_modules/moment.coffee\0", 0x7FFF5FBFE578, 0x9)           = -1 Err#2
 7079/0x7cf313:   1244663 open("/Users/burke/code/api/api/models/node_modules/moment/package.json\0", 0x0, 0x1B6)                = -1 Err#2
 7079/0x7cf313:   1244694 stat64("/Users/burke/code/api/api/models/node_modules/moment/index.js\0", 0x7FFF5FBFE578, 0x1B6)               = -1 Err#2
 7079/0x7cf313:   1244713 stat64("/Users/burke/code/api/api/models/node_modules/moment/index.json\0", 0x7FFF5FBFE578, 0x1B6)             = -1 Err#2
 7079/0x7cf313:   1244729 stat64("/Users/burke/code/api/api/models/node_modules/moment/index.node\0", 0x7FFF5FBFE578, 0x1B6)             = -1 Err#2
 7079/0x7cf313:   1244745 stat64("/Users/burke/code/api/api/models/node_modules/moment/index.coffee\0", 0x7FFF5FBFE578, 0x1B6)           = -1 Err#2
 7079/0x7cf313:   1244767 stat64("/Users/burke/code/api/api/node_modules/moment\0", 0x7FFF5FBFE5D8, 0x1B6)               = -1 Err#2
 7079/0x7cf313:   1244788 stat64("/Users/burke/code/api/api/node_modules/moment.js\0", 0x7FFF5FBFE578, 0x1B6)            = -1 Err#2
 7079/0x7cf313:   1244805 stat64("/Users/burke/code/api/api/node_modules/moment.json\0", 0x7FFF5FBFE578, 0x1B6)          = -1 Err#2
 7079/0x7cf313:   1244821 stat64("/Users/burke/code/api/api/node_modules/moment.node\0", 0x7FFF5FBFE578, 0x1B6)          = -1 Err#2
 7079/0x7cf313:   1244837 stat64("/Users/burke/code/api/api/node_modules/moment.coffee\0", 0x7FFF5FBFE578, 0x1B6)                = -1 Err#2
 7079/0x7cf313:   1244862 open("/Users/burke/code/api/api/node_modules/moment/package.json\0", 0x0, 0x1B6)               = -1 Err#2
 7079/0x7cf313:   1244887 stat64("/Users/burke/code/api/api/node_modules/moment/index.js\0", 0x7FFF5FBFE578, 0x1B6)              = -1 Err#2
 7079/0x7cf313:   1244904 stat64("/Users/burke/code/api/api/node_modules/moment/index.json\0", 0x7FFF5FBFE578, 0x1B6)            = -1 Err#2
 7079/0x7cf313:   1244920 stat64("/Users/burke/code/api/api/node_modules/moment/index.node\0", 0x7FFF5FBFE578, 0x1B6)            = -1 Err#2
 7079/0x7cf313:   1244936 stat64("/Users/burke/code/api/api/node_modules/moment/index.coffee\0", 0x7FFF5FBFE578, 0x1B6)          = -1 Err#2
 7079/0x7cf313:   1244964 stat64("/Users/burke/code/api/node_modules/moment\0", 0x7FFF5FBFE5D8, 0x1B6)           = 0 0
 7079/0x7cf313:   1244990 stat64("/Users/burke/code/api/node_modules/moment.js\0", 0x7FFF5FBFE578, 0x1B6)                = -1 Err#2
 7079/0x7cf313:   1245015 stat64("/Users/burke/code/api/node_modules/moment.json\0", 0x7FFF5FBFE578, 0x1B6)              = -1 Err#2
 7079/0x7cf313:   1245038 stat64("/Users/burke/code/api/node_modules/moment.node\0", 0x7FFF5FBFE578, 0x1B6)              = -1 Err#2
 7079/0x7cf313:   1245488 madvise(0x1008AE000, 0x21000, 0x9)             = 0 0
 7079/0x7cf313:   1245503 stat64("/Users/burke/code/api/node_modules/moment.coffee\0", 0x7FFF5FBFE578, 0x9)              = -1 Err#2
 7079/0x7cf313:   1245612 open("/Users/burke/code/api/node_modules/moment/package.json\0", 0x0, 0x1B6)           = 11 0
Run Code Online (Sandbox Code Playgroud)

有没有办法让Node不浪费这么多时间查看不包含node_modules目录的地方?就像,我可以设置某种CHECK_HERE_FIRST=$HOME/code/api/node_modules环境变量,如果require不是相对路径,那么这将是Node检查的第一个地方.

我可以更改所有require行以加载相对导入,但这对于大型项目来说似乎很麻烦.

Pie*_*ert 5

此行为(产生太多统计信息)已从io.js v2.3.1中删除(请参阅PR),它将在下一个主要版本的node.js中可用。


Hyo*_*yun 0

我认为没有一种优雅的方法可以在不改变的情况下做到这一点require,应该避免这种情况。如果您担心性能问题,那么知道由于模块缓存而只会发生一次,这可能会帮助您在晚上入睡。

也许您可以使用require应用程序启动期间所需的所有模块。