【问题标题】:Not able to access variables in required file无法访问所需文件中的变量
【发布时间】:2015-09-07 11:08:52
【问题描述】:

我在一个项目中使用 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);

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

这种行为甚至可能吗?

【问题讨论】:

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

标签: javascript gulp require browserify


【解决方案1】:

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

你会写

export var test = 'test';

声明并导出变量test。然后您可以使用

导入它
import {test} from './test';

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

【讨论】:

    猜你喜欢
    • 2011-12-11
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多