我在Node项目中有两个javascript文件。一种是路由器,它具有路由和相应的功能。另一个是实用程序类,其中常用的函数被编写为原型。说utilService.getSomething();
第一个文件调用第二个文件中的utilService.getSomething()。
我在第二个文件中导入了第一个文件(这是不必要的,也是未使用的),然后我在第一个文件中调用了一个API。
我得到错误500,指出utilService.getSomething()不是一个函数。
我花了那么多时间来思考使用Promise时出了问题,然后尝试使用async和await,结果也出现了同样的错误。
最后,我删除了导入,发现API调用进行得很好。
我印象是Required只是在另一个脚本中导入方法。但在它之外还有一些东西。有网上的资源,将告诉请求的目的。但我喜欢理解这种行为。
在nodeJS中,require允许您从其他文件导入模块。它帮助您拆分应用程序,只加载执行它们所需的文件,而不是毫无意义地加载大量未使用的代码。
它实际上以不同的名称存在于许多其他语言中:require(php),include(php),import(typescript,Python.。。等等)
另外一件事:为了能够正确地使用require,您必须“导出”模块,定义,函数,类。。。等等,以便能够在另一个脚本中使用它们,使用“module.exports”或“exports”。所以它基本上与“上下文”有关,或者如果你喜欢“范围”的话。
这就是为什么当您使用package.json执行“NPM安装”时,会有一个名为“node_modules”的文件夹。
多亏了“required”,你可以只导入必要的东西,而不是每次你在你的应用程序上做某件事时导入整个项目文件。
虽然require
通常用于导入其他模块和脚本,但它也执行这些模块中的任何代码。这允许模块覆盖其他模块和对象原型的属性。模块不需要module.exports
有效即可导入。
例如:
文件1.js
module.exports = {
foo: ()=>{
console.log("hello");
}
};
文件2.js
const mod = require("./File1.js");
delete mod.foo;
index.js
const mod = require("./File1.js");
mod.foo(); // hello
require("./File2.js"); // undefined
mod.foo(); // mod.foo is not a function