我正在尝试在node.js中创建自己的模块,以后可以使用。
出于学习目的,不幸的是,我不知道如何正确使用它,因此创建了一个javaScript类来实践这种东西。
我的课:
class Taschenrechner {
let plus = (param1, param2) => {
return param1 + param2;
}
let minus = (param1, param2) => {
return param1 - param2;
}
let mal = (param1, param2) => {
return param1 * param2;
}
let geteilt = (param1, param2) => {
return param1 / param2;
}
let potenz = (param1, param2) => {
return param1 ** param2;
}
}
所以只需说说我想导出所有这些功能,以便可以像这样使用它们:
let calculator = require("taschenrechner");
calculator.add(4, 4);
类似的东西...(我仍然是菜鸟,如你所见:D)
官方节点模块使用类似.exports
的东西,我是否可以/也应该将其用于自己的代码?
答案 0 :(得分:5)
let
中不允许使用 class
。使用Babel和ES.next class fields,可能是:
class Taschenrechner {
static plus = (param1, param2) => {
return param1 + param2;
}
...
}
在ES6中,可能是:
class Taschenrechner {}
Taschenrechner.plus = (param1, param2) => {
return param1 + param2;
}
...
Taschenrechner
在这里仅充当命名空间。 Taschenrechner
不应该是一个类,因为它不使用可以从中受益的状态或其他类特征。
模块应该在JS中充当名称空间。对于CommonJS模块,它应该是:
exports.plus = (param1, param2) => {
return param1 + param2;
};
...
使用ES模块:
export const plus = (param1, param2) => {
return param1 + param2;
};
...
答案 1 :(得分:3)
如果要使用class
,则不会在其中使用let
。这不是定义类的方法。但是我不认为您还是要使用类,因为您必须实例化一个类,这里没有必要。最好只定义一个对象。
是的,您只需要使用module.exports
来创建您的模块。像这样:
const Taschenrechner = {
plus: (param1, param2) => {
return param1 + param2;
},
minus: (param1, param2) => {
return param1 - param2;
}
};
module.exports = Taschenrechner;
但是,要加载模块:除非您实际上是通过npm加载模块,否则必须包含某种路径。像这样:
let calculator = require("./taschenrechner");
calculator.plus(4, 4);
注意,假设您不需要.js
。但是您需要使用类似./
的东西(也就是说,它与调用它的脚本位于同一目录中)。或一些等效的相对或绝对路径。
答案 2 :(得分:2)
如果只需要模块名称(require("taschenrechner")
),NodeJS就会在node_modules
目录中搜索该模块。因此,这是一种导入在npm registry中发布的私有或公共NodeJS包(库)的机制。
如果要这样做,请参阅NPM文档中的“如何Publish & Update a Package”。 How to Create Node.js Modules部分介绍了如何定义模块。
如果您不想发布您的软件包,则可以始终使用.exports
机制来要求您的模块。只需在模块(文件)名称前写一个路径。如果文件位于同一目录中,则示例:require("./taschenrechner")