在Browserify中实现对每个模块的数据的完全访问权限

时间:2014-02-27 06:58:14

标签: javascript browserify

我对Browserify感到困惑。我正在尝试使用下一个结构设计应用程序:

Acces structure of application

config.js

module.export = {loaded:false};

main.js

var $ = require("jquery");

$(document).ready(function(){
   var App = require("app.js");
   App.start();
});

app.js

var TagsManager = require("./mng/tags"); 
var SettingsManager = require("./mng/settings");

function App(){
   var config = require("./config");
   this.tagsManager = new TagsManager();
   this.settingsManager = new SettingsManager();
   this.method = function(){
       // here i'm changing config json
       config.loaded = true;
   }

   this.method(); //writing from this to config
   this.tagsManager.method(); //writing from tags manager 

}

module.exports = new App();

tags.js

在这个模块中,我需要获得访问配置。

function TagsManager(){
    var config = require("./config");
    ...
    this.method = function(){
       config.newProp =  config.loaded ? "This is new property" : null; 
    }
    ...
}

module.exports = TagsManager();

如果我将配置作为模块包含在每个其他模块中,那么在每个模块中我都可以读取和写入配置,但是当我需要从另一个模块读取假设配置中的更改时,我看不到它们。我的意思是当我在app.js中写入配置属性config.loaded = true之后,我在标签管理器中调用方法,如果config.newProp = "This is new property"config.loaded == true,我看到标签管理器配置看起来像它是在config.js中确定的。

将配置放到window对象的解决方案看起来非常奇怪。还有其他解决方案吗?或者我只是不明白如何使用Browserify?

1 个答案:

答案 0 :(得分:1)

我认为您误解了Browserify工作流程的工作原理。要求将模块放入变量然后对其进行修改不会将信息保存在文件所在的位置。 Browserify基本上将所有模块连接成一个脚本,并使用轻量包装器来读取require个调用。但是你仍然在浏览器中工作。全球对象是正确的方法。如果您想永久保存信息,那么您将需要cookie,localStorage或数据库。