Javascript 无法访问所需文件中的变量

Javascript 无法访问所需文件中的变量,javascript,gulp,require,browserify,Javascript,Gulp,Require,Browserify,我正在一个项目中使用browserify,并遇到以下问题: var test = 'test'; 我有一个test.js文件。在test.js中,只有以下内容: var test = 'test'; 现在,在同一个目录中,我有我的主文件“app.js”。我需要test.js并尝试访问“test”,如下所示: var testing = require(./test.js); alert(test); 此操作失败,控制台返回“测试未定义” 现在,我试着把它放在“test.js”中: modu

我正在一个项目中使用browserify,并遇到以下问题:

var test = 'test';
我有一个test.js文件。在test.js中,只有以下内容:

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

var testing = require(./test.js);
alert(test);
此操作失败,控制台返回“测试未定义”

现在,我试着把它放在“test.js”中:

module.exports = {
    test: 'test'
}
以及app.js中的:

var testing = require(./test.js);
alert(testing.test);
这确实有效,但这不是我想要的。我不想定义对象中的每个变量、函数等。我希望test.js代码的整个文件在app.js中的代码之前由gulp写入,就像它是一个服务器包含一样,或者就像这两个文件都在'head'元素中,test.js是首先写入的一样


这种行为可能吗?

如果没有自定义逻辑,就不可能实现您想要的。不过,我相信您可以通过使用而不是CommonJS模块找到折衷方案

你就可以写作了

export var test = 'test';
它声明并导出变量
test
。然后,您可以使用

import {test} from './test';

因为您使用的是browserify,所以将ES6模块插入CommonJS转换器非常简单。例如,您可以使用。

“这种行为可能吗?”它可能与一些自定义预处理脚本一起使用,但这会使您的代码更难维护。例如,在包含
test.js
的每个文件中,您必须记住在该文件中声明了哪些变量,这样您就不会意外地覆盖它们。基本上,您需要全局变量,但有一个理由可以说明为什么应该避免使用全局变量。如果您只是想“自动导出”所有定义的变量,那是不可能的。也许您应该研究ES6模块定义,这将允许您编写
export var test='test'。但这就是CommonJS模块的工作原理。。。不过,您可以使用全局变量(糟糕的做法)。Google->Node.js全局变量