【发布时间】:2018-03-04 04:16:25
【问题描述】:
我有两个相互依赖的文件:
runner.js
import { build, altBuild } from './build';
const defaultValue = {
code: 42,
};
export function options(value = defaultValue) {
return value;
}
export function altOptions(value = { code: 9 }) {
return value;
}
console.log(build());
console.log(altBuild());
构建.js
import { options, altOptions } from './runner';
const buildParams = {
foo: 'bar',
extra: options(),
}
const altBuildParams = {
foo: 'bar',
extra: altOptions(),
}
export function build() {
console.log(options());
return buildParams;
}
export function altBuild() {
console.log(altOptions());
return altBuildParams;
}
运行时我希望输出是:
{ code: 42 }
{ foo: 'bar', extra: { code: 42 } }
{ code: 9 }
{ foo: 'bar', extra: { code: 9 } }
但实际上是:
{ code: 42 }
{ foo: 'bar', extra: undefined }
{ code: 9 }
{ foo: 'bar', extra: { code: 9 } }
我可以解决这个问题,但我真的很好奇为什么会这样。我正在使用 Node 7.10 和 babel-node 6.26 来运行这个示例。
用转译的代码更新:
转译的 runner.js
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.options = options;
exports.altOptions = altOptions;
var _build = require('./build');
var defaultValue = {
code: 42
};
function options() {
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultValue;
return value;
}
function altOptions() {
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { code: 9 };
return value;
}
console.log((0, _build.build)());
console.log((0, _build.altBuild)());
编译后的 build.js
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.build = build;
exports.altBuild = altBuild;
var _runner = require('./runner');
var buildParams = {
foo: 'bar',
extra: (0, _runner.options)()
};
var altBuildParams = {
foo: 'bar',
extra: (0, _runner.altOptions)()
};
function build() {
console.log((0, _runner.options)());
return buildParams;
}
function altBuild() {
console.log((0, _runner.altOptions)());
return altBuildParams;
}
【问题讨论】:
-
你看转译的代码了吗?
-
我做了 Felix,但它让我好奇,为什么它没有按预期工作。我会用转译的代码更新问题。
-
这两个文件之间存在循环依赖的原因是什么?
-
它基本上是代码Ghassen的组织。我当然可以用另一种方式组织它们来避免这种情况,但我很好奇为什么我不能让它像这样工作。
标签: javascript ecmascript-6 babeljs circular-dependency es6-modules