2015-06-22 80 views
1

我使用browserify上一个项目,我在下面的运行:无法访问所需文件变量

我有一个文件test.js.在test.js中只有以下内容:

var test = 'test'; 

现在,在同一个目录中我有我的主文件'app.js'。我需要test.js并尝试访问'测试',如下所示:

var testing = require(./test.js); 
alert(test); 

失败并且控制台返回'test is undefined'。现在

,我也尝试把这个在 'test.js',而不是:

module.exports = { 
    test: 'test' 
} 

和在app.js:

var testing = require(./test.js); 
alert(testing.test); 

这的工作,但它不是什么我想要。我不想在一个对象中定义每个变量,函数等。我希望test.js代码的整个文件能够在app.js中的代码之前通过gulp写入,就好像它是一个服务器包含或者好像这两个文件都在'head'元素中,并且test.js写入了第一。

这种行为甚至可能吗?

+0

*“这种行为甚至可能吗?”*它可能带有一些自定义预处理脚本,但这会让您的代码难以维护。例如。在每个包含'test.js'的文件中,你都必须记住哪个变量是在该文件中声明的,这样你就不会意外地覆盖它们。你基本上想要全局变量,但是为什么要避免使用全局变量是有原因的。如果你只是想“自动导出”所有已定义的变量,那是不可能的。也许你应该看看ES6模块的定义,它可以让你编写'export var test ='test';'。 –

+0

但是,这就是CommonJS模块应该如何工作......尽管(不好的做法),你可以使用全局变量。 Google - > Node.js全局变量 – reg4in

回答

1

没有自定义逻辑,不可能实现你想要的。不过,我相信你可以通过使用ES6 modules而不是CommonJS模块来找到一个妥协方案。

你就可以写

export var test = 'test'; 

其声明和出口变量test。然后您可以导入它

import {test} from './test'; 

由于您使用的是browserify,将ES6模块插入CommonJS转换器非常简单。例如。你可以使用Babel