我想知道如何将外部库导入nodejs。 例如,我想拥有phanotmjs库(我知道islady存在一个npm来获取phantomjs,但这只是一个例子)。
我认为一种方法是获取库的源文件并将其包含在这样的模块中:
module.exports = function (name, cb) {
//source code of library
});
但我认为这是一种错误的方式。
如何将外部库包含到nodejs项目中以在其中使用它的功能?
由于
答案 0 :(得分:3)
没有导出,没有优雅的方法是复制整个库,在节点文件的底部。讨厌你可能已经考虑过了。这也是一件坏事。您将无法在所有不同的文件中重复使用它。
另一种方法是每次需要函数时沿着工作流导出文件。我认为这没问题。
否则要回答这个问题,你可以这样写出口:
module.exports = {
removeElementFromArray_Mutate,
hasClass,
hasClass_ONEtest,
removeClassFromAll,
addClass,
removeClass
};
你可以用节点做到这一点。所有这些都是以这种方式声明的正常函数:
function removeClassFromAll(DOMobject, classes){
for(let i = 0; i < DOMobject.length; i++){
removeClass(DOMobject[i], classes);
}
}
function hasClass_ONEtest(DOMElement, classe) {
let allClasses = DOMElement.className.split(/\s+/);
for(let i = 0; i < allClasses.length; i++){
if(allClasses[i].trim() === classe){
return true;
}
}
return false;
}
function hasClass(DOMElement, classes) {
if (typeof classes === 'string') {
return hasClass_ONEtest(DOMElement, classes);
} else { // multiple classes as array
for (let i = 0; i < classes.length; i++) {
if (!hasClass_ONEtest(DOMElement, classes[i])) {
return false;
}
}
return true;
}
}
通过这种方式,您可以编写一个快速脚本来解析所有文件,并取出函数的定义,如果您不能手动完成。你可以使用正则表达式来加速它。你需要两种模式。 function name(
的第一个和name = function(
的第二个。希望这很有用!
问题更多的是关于nodejs是否包含一种方式。目前没有。它可能在将来。您可能还会看到此How do I include a JavaScript file in another JavaScript file?。但它可能无济于事。
答案 1 :(得分:1)
当nodejs上有一个requires
模块时,会返回module.exports
的内容。因此,可以返回一个函数(就像你的例子一样)或一个对象,如
in module.js:
module.exports={
func:function(){ return true; },
val:10,
...
}
这样,在需求文件中,您可以:
var m=require('module');
assert(m.func()===true);
assert(10===m.val);
这在Modules
因此,如果您有一个外部JS库,它公开了三个函数:a,b和c,您可以将它们包装为:
module.exports={
exportedA:lib.a,
exportedB:lib.b,
exportedC:lib.c
};
lib.a=function(){ ... };
lib.b=function(){ ... };
lib.c=function(){ ... };