我有一个基本文件,它包含一个类:
档案-1:
class Foo {
constructor() {
this.count = 0;
}
}
export = new Foo();然后我将这个实例导入到另外两个文件中:
档案-2:
import Foo = require("./File-1");
Foo.count = 6;
export const logFile2Count = () => console.log(Foo.count); // 6档案-3:
import Foo = require("./File-1");
export const logFile3Count = () => console.log(Foo.count); // 0档案-4:
import { logFile2Count } from "./File-2";
import { logFile3Count } from "./File-3";
logFile2Count(); // "6"
logFile3Count(); // "0" (Expected 6)我希望Foo的状态在导入到的所有文件中保持持久性。也就是说,我想在每个文件中导入Foo的引用,而不是在每个文件中导入Foo的副本。我该怎么做?
发布于 2020-06-12 21:38:55
我不确定,但经过一些实验,这是因为require相对于导入语句的行为方式(可能与tsc/babel转换代码的方式有关);它运行文件中的整个代码,然后给出导出的值。如果您更改为使用import语句,那么它将工作,因为它在导出时为类提供了一个引用,而不是运行整个文件并为您提供一个新实例。
这将给你你想要的行为:
档案-1:
class Foo {
constructor() {
this.count = 0;
}
}
const foo = new Foo();
export foo;档案-2:
import { foo } from "./File-1";
/** -- snip -- **/发布于 2020-06-12 21:38:42
实际上,我在节点js中尝试了下面的操作,使用了require而不是import。它似乎与预期的文件-1.js一样工作。
class Foo {
constructor() {
this.count = 0;
}
}
module.exports = new Foo();File-2.js
let Foo = require("./File-1");
Foo.count = 6;
module.exports.logFile2Count = () => console.log(Foo.count); // 6File-3.js
let Foo = require("./File-1")
module.exports.logFile3Count = () => console.log(Foo.count); // 0File-4.js
let {logFile2Count} = require("./File-2");
let {logFile3Count} = require("./File-3");
logFile2Count(); // "6"
logFile3Count(); // "0" (Expected 6)这是我得到的输出
node File-4.js
6
6发布于 2020-06-12 22:06:14
如果没有任何形式的同步。在File-2.js和File-3.js模块之间,在从File-1.js读取之前(比如File-2.js依赖于File-3.js,反之亦然),我认为您只能在公共依赖项File-1.js中直接设置值,以100%确保依赖模块读取相同的值。
这是因为代码变成了一种种族条件
https://stackoverflow.com/questions/62352740
复制相似问题