仅从js文件导出功能?

时间:2019-08-06 06:52:05

标签: javascript node.js typescript webpack

我有两个模块,一个用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 .envIAM=service, 对于caller.ts .envIAM=caller

因此,如果service.js是从其自己的模块调用的,则IAMservice,但是从外部调用时,例如从caller.tsIAM的值为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');
}

因此,根据调用方的配置,我决定是否执行特定的代码段。

用于.env https://www.npmjs.com/package/dotenv

的插件

2 个答案:

答案 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 .envIAM=service, 对于caller.ts .envIAM=caller

因此,如果service.js是从其自己的模块调用的,则IAMservice,但是从外部调用时,例如从caller.tsIAM的值为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');
}

因此,根据调用方的配置,我决定是否执行特定的代码段。

用于.env https://www.npmjs.com/package/dotenv

的插件