我想检查文件是否是“可获取的”,我该怎么办?
我检查了npm包,googled stackoverflow和读取nodejs文档,但仍然没有答案。
我搜索编写isRequirable()
函数的方式,这将在示例中起作用
明显的例子:
isRequirable('./package.json') // true
isRequirable('./asd.txt') // false
不那么明显的例子:
$ cat normal.js
module.exports = function();
$ cat eval.js
({
evil: true
})
然后
isRequirable('./normal.js') // true
isRequirable('./eval.js') // false
答案 0 :(得分:1)
由于不是Node的专家,我建议使用正则表达式和try-catch模块请求进行两步检查。
它涵盖了大多数情况,包括与Browserify或其他打包程序捆绑在一起的文件。
检查出来:
// isRequirable.js
var fs = require('fs');
var isRequirable = function (filename) {
var result;
var content;
var rex = /(?:^|\s*;|\s*=)\s*(?:module\.)*exports(\..+)*\s*=\s*.+/gm;
try {
content = fs.readFileSync(filename).toString();
} catch (err) {
content = '';
console.log(err);
}
result = content.match(rex) ? true : false;
if (result) {
try {
var temp = require(filename);
} catch (err) {
result = false;
console.log(err);
}
}
return result;
};
module.exports = isRequirable;
在另一个地方
var isRequirable = require('./isRequirable');
console.log(isRequirable('./isRequirable.js'));
// true
console.log(isRequirable('./eval.js'));
// false
console.log(isRequirable('./test.js')); // where test.js is (function () {})();
// false
console.log(isRequirable('nonexistent'));
// { ... no such file or directory ... ]
// false
console.log(isRequirable('./browserify/bundle.js'));
// [ReferenceError: document is not defined]
// false