Mat*_*nar 40 javascript development-environment node.js
我正在使用Node.js开发一个项目,服务器端代码变得越来越大,我想把它拆分成多个文件.它似乎已经在客户端完成了很长时间,通过script为每个文件插入一个标记来完成开发,并且仅用于分发类似于"Make"用于将所有内容放在一起.我意识到连接所有服务器端代码是没有意义的,所以我不会问如何做到这一点.我能找到的最接近的东西是require(),但是它的行为script与浏览器中的行为不同,因为要求的文件不共享公共名称空间.
看看一些较旧的Node.js项目,比如Shooter,看起来曾经不是这样,或者我在代码中遗漏了一些非常简单的东西.我的require'd文件在编译时和运行时都无法访问全局调用命名空间.有没有简单的方法或者我们是否被迫使所有需要的JS文件完全从调用范围中自治?
Ray*_*nos 59
你不需要一个通用的命名空间,因为全局变量是邪恶的.在节点中我们定义模块
// someThings.js
(function() {
var someThings = ...;
...
module.exports.getSomeThings = function() {
return someThings();
}
}());
// main.js
var things = require("someThings");
...
doSomething(things.getSomeThings());
Run Code Online (Sandbox Code Playgroud)
您可以定义一个模块,然后通过写入为您的模块公开一个公共API exports.
处理此问题的最佳方法是依赖注入.您的模块公开了一个init函数,并将依赖项的对象哈希传递给您的模块.
如果您真的坚持访问全局范围,那么您可以通过访问它global.每个文件都可以写入和读取global对象.你再次不想使用全局变量.
mic*_*ong 34
重新@Raynos回答,如果模块文件在包含它的文件旁边,它应该是
var things = require("./someThings");
Run Code Online (Sandbox Code Playgroud)
如果模块已发布,并通过npm安装,或明确放入./node_modules/文件夹,那么
var things = require("someThings");
Run Code Online (Sandbox Code Playgroud)
是正确的.
| 归档时间: |
|
| 查看次数: |
35674 次 |
| 最近记录: |