Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 防止来自特定文件夹中模块的相对require调用_Javascript_Node.js - Fatal编程技术网

Javascript 防止来自特定文件夹中模块的相对require调用

Javascript 防止来自特定文件夹中模块的相对require调用,javascript,node.js,Javascript,Node.js,这听起来很奇怪,但我希望特定目录中的所有模块都只能从node_模块中获取资源,而不能从应用程序的任何其他部分获取资源 在特定目录中: require('fs')——应该可以工作 require('../../something')--拒绝 require(“./另一个”)--拒绝 在节点中远程执行类似的操作吗?您可以创建一个模块,该模块将充当require代理: module.exports.require2 = function() { if (arguments[0][0] !=

这听起来很奇怪,但我希望特定目录中的所有模块都只能从node_模块中获取资源,而不能从应用程序的任何其他部分获取资源

在特定目录中:

  • require('fs')
    ——应该可以工作
  • require('../../something')
    --拒绝
  • require(“./另一个”)
    --拒绝

在节点中远程执行类似的操作吗?

您可以创建一个模块,该模块将充当require代理:

module.exports.require2 = function() {
    if (arguments[0][0] !== '.') {
        return require.apply(this, arguments);
    } else {
        throw new Error('Can\'t require relative modules');
    }
}
当然,这将由开发人员选择加入:

var require2 = require('require2');
var fs = require2('fs'); //everything's good
var fss = require2('./fss'); //throws an error

与thlorenz的想法类似。

这似乎是一件奇怪的事情,但如果你能解释你的理由,那么有人可能会提出更好的建议。如果您运行的是不受信任的代码,那么
require
是您最不担心的问题…肯定很奇怪。有人反对内部化某些模块,因为“人们可能会进行相对的require调用”(从而创建特定的代码,而不是独立的模块)。虽然我认为将他们转移到那里对组织/应用程序来说是有意义的,但另一方担心开发人员会做一些愚蠢的事情。显然,不可信的不是代码,而是开发人员编写的。您是否可以(在您的vcs中)创建一个预接收挂钩,搜索类似于
/require\('.*/g
的内容并拒绝提交(附带一条有用的消息)如果它找到了?这样,您仍然可以执行此规则,而不必让node持续工作来执行它。@MichaelTang是一个可靠的建议。我一定会研究这个问题。