覆盖需要从根启动并检查节点模块而不更改其名称

我试图分享我的客户端和服务器代码,我想要一个整洁的方式要求我的依赖。

我目前使用webpack作为我的构build工具,并将其设置为parsing到我的资产/ js文件夹,所以我的客户端依赖关系如下所示:

require('validators/login.js'); 

我希望在整个服务器上分享完全相同的代码,但是我不想把if语句放进来检查是否服务器或客户端正在执行这个请求,所以我可以做类似于

 if server rootRequire.. else require 

我想要的服务器使用需求像客户端一样,并从根目录开始,但我也不想剥离它的function来searchnode_modules文件夹,如果它不返回结果。

我也想这样做,而不是把我所有的代码放在node_modules文件夹中。

有没有人有一些好的build议,如何正确地覆盖需求? 我已经阅读了大部分的hacky解决scheme,比如使用符号链接或者在node_modules中放置东西,我不想find这些答案,我想要一些干净的,实际上覆盖正确的东西。

我想我已经想出了一个我很满意的解决scheme,我想和任何需要答案的人分享。

 var module = require('module'); var baseRequire = module.prototype.require; module.prototype.require = function() { // Add any extra paths here... var extraPaths = [ __dirname ]; for (var i = 0, len = extraPaths.length; i < len; i++) { if (this.paths.indexOf(extraPaths[i]) == -1) { this.paths.push(extraPaths[i]) } } return baseRequire.apply(this, arguments); };