如何使用browserify
创建私人自定义全局变量?
例如,可以从所有browserify文件(require()
)访问变量,但不能在browserify
块之外,console
或其他脚本无法访问它。
我尝试过全局,但可以从窗口/控制台访问它。
示例代码:
Main.js
mycustomglobal.test = require('blabla');
mycustomglobal.test2 = require('blablablabla');
var users = require('./users.js');
Users.js文件:
console.log(mycustomglobal);
// we need to be able to get test and test2
控制台/或其他脚本
console.log(mycustomglobal)
// we need to get undefined
答案 0 :(得分:2)
我不确定你想要实现的目标(可能会发布更多代码),但我认为你想要做一些事情而不暴露全局变量?你能使用立即调用的函数吗?只要您的所有代码都在函数内部,一切都将受到保护,但没有任何功能会在功能上发生变化:
(function() {
var module = require('your_module'),
connection = new WebSocket('server.php'),
data = [{score: 12, name: 'test'}, {score: 40, name: 'user1'}];
// ... Your other code
})();
如果您有许多脚本,您可能需要将它们包装在函数中,然后使用IIF从主脚本中调用它们,传递任何参数以便它们不会泄漏:
js_file_1.js:
(function() {
var private_non_global = 1234;
// Do some stuff...
script2(private_non_global); // Go to next script...
})();
js_file_2.js:
function script2(private_non_global_from_script1) {
private_non_global_from_script1 === 1234;
// Do more stuff, etc.
}
如果你可以改变服务器端的东西,你可以将所有代码包装在一个巨大的IIF中。您不能拥有只能访问代码的全局变量,因为任何人都可以打开控制台来访问任何全局变量。保护变量的唯一方法是封装所有代码。
答案 1 :(得分:0)
我认为这样的事情会满足你的需求。您需要创建一个模块,我更喜欢将其命名为private_globals.js
:
var globals={};
module.exports=globals;
在您的其他文件中,您可以使用此模块的导出对象。
var globals=require("./private_globals")
console.log(globals.privateVar1);
globals.privateVar2=10;
除非你搞乱浏览器的来源,否则我无法想到其他任何方式。