【问题标题】:Bundled several scripts in one bundle.js but I'm having issues with variable access在一个 bundle.js 中捆绑了多个脚本,但我遇到了变量访问问题
【发布时间】:2017-09-20 13:00:20
【问题描述】:

我正在开发一个项目,该项目需要将所有脚本合并到一个 bundle.js 文件中。我设法用browserify做到了这一点。这里的问题是,虽然 bundle.js 文件中包含的每个单独的脚本都可以完美地执行包含的代码,但它无法从其他脚本访问全局变量。 就像在这个例子中一样。第一个脚本执行完美,但第二个脚本无法访问切片变量,即使第一个脚本正确执行,当然是第一个。 有关如何解决此问题的任何想法?

first.js 脚本的内容:

var a = ['zero', 'one', 'two', 'three'];
var sliced = a.slice(1, 3);


function logger() {
    console.log(a);      // ['zero', 'one', 'two', 'three']
    console.log(sliced); // ['one', 'two']
    console.log("first.js script executed");
};

logger(); 

second.js 脚本的内容:

console.log(sliced);

【问题讨论】:

  • 您可以尝试将变量放入全局列表中,例如global.sliced = sliced;,我不知道这是否是个好主意:)
  • 我之前尝试过,它确实有效。但我同意。这不是最好的主意。

标签: javascript bundle browserify


【解决方案1】:

模块不共享全局状态。您需要像导入服务器端节点脚本一样将一个模块导入另一个模块。然后传入共享变量。与 Browserify 的“捆绑”是关于解析这些导入并将结果保存到 1 个文件中,因为浏览器不理解 CommonJS 导入语法。

script.js

let script2 = require('./relative/path/to/script2.js');

let a = ['zero', 'one', 'two', 'three'];
let sliced = a.slice(1, 3);

function logger() {
    console.log(a);      // ['zero', 'one', 'two', 'three']
    console.log(sliced); // ['one', 'two']
    console.log("first.js script executed");
};

logger();
script2(sliced)

script2.js

function script2PublicFunction (sliced){
    console.log(sliced);
}

module.exports = script2PublicFunction;

【讨论】:

  • 谢谢。这正是我所需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-18
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
相关资源
最近更新 更多