如何将外部库导入nodejs

时间:2014-05-13 21:09:56

标签: node.js npm

我想知道如何将外部库导入nodejs。 例如,我想拥有phanotmjs库(我知道islady存在一个npm来获取phantomjs,但这只是一个例子)。

我认为一种方法是获取库的源文件并将其包含在这样的模块中:

module.exports = function (name, cb) {
   //source code of library
});

但我认为这是一种错误的方式。

如何将外部库包含到nodejs项目中以在其中使用它的功能?

由于

2 个答案:

答案 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

下的nodejs文档中有解释

因此,如果您有一个外部JS库,它公开了三个函数:a,b和c,您可以将它们包装为:

module.exports={
    exportedA:lib.a,
    exportedB:lib.b,
    exportedC:lib.c
};

lib.a=function(){ ... };

lib.b=function(){ ... };

lib.c=function(){ ... };