我有两个模块,一个用ts
编写,另一个用js
编写。 js
模块中的一个实用程序需要在ts
模块中进行访问。
因此,实用程序service.js
如下,
module.exports = {
helloFriends: function (message) {
console.log(message);
}
}
console.log('This part should not get invoked');
被称为caller.ts
如下,
import { helloFriends } from './../moduleb/service';
helloFriends('Hello');
在tsc caller.ts
之上的输出然后在node caller.js
之上的输出,
This part should not get invoked
Hello
除了功能service.js
之外,我不希望从helloFriends
调用任何其他代码,我该怎么办?
注意: 这两个模块彼此独立,并具有各自的节点依赖性。
更新:
我遇到了黑客,我在两个模块IAM
文件中都定义了.env
。
对于service.js
.env
有IAM=service
,
对于caller.ts
.env
有IAM=caller
,
因此,如果service.js
是从其自己的模块调用的,则IAM
是service
,但是从外部调用时,例如从caller.ts
到IAM
的值为caller
,然后在service.js
中进行以下更改:
在service.js
中,我进行了如下更改:
var iam = process.env.IAM;
module.exports = {
helloFriends: function (message) {
console.log(message);
}
}
if (iam === 'service') {
console.log('This part should not get invoked, When called by external modules other than service');
}
因此,根据调用方的配置,我决定是否执行特定的代码段。
的插件答案 0 :(得分:0)
我认为这里的问题是由以下问题提示的:How does require() in node.js work?。在问题中,提问者在模块中具有以下代码:
// mod.js
var a = 1;
this.b = 2;
exports.c = 3;
导入mod.js时,将设置以下属性:
// test.js
var mod = require('./mod.js');
console.log(mod.a); // undefined
console.log(mod.b); // 2
console.log(mod.c); // 3
this / exports差异本身很有趣,但是它也告诉我们,整个模块在需要/导入时都在运行,并且如answer中所述,您甚至可以返回一部分模块代码。
这意味着,除非您有退出模块代码的方法,否则您的console.log('This part should not get invoked');
将被调用
答案 1 :(得分:0)
更新:
我遇到了黑客,我在两个模块IAM
文件中都定义了.env
。
对于service.js
.env
有IAM=service
,
对于caller.ts
.env
有IAM=caller
,
因此,如果service.js
是从其自己的模块调用的,则IAM
是service
,但是从外部调用时,例如从caller.ts
到IAM
的值为caller
,然后在service.js
中进行以下更改:
在service.js
中,我进行了如下更改:
var iam = process.env.IAM;
module.exports = {
helloFriends: function (message) {
console.log(message);
}
}
if (iam === 'service') {
console.log('This part should not get invoked, When called by external modules other than service');
}
因此,根据调用方的配置,我决定是否执行特定的代码段。
的插件