有没有办法检查所有函数引用是否都是在JavaScript/节点应用程序中定义的?

有没有办法检查所有函数引用是否都是在JavaScript/节点应用程序中定义的?,javascript,node.js,eslint,Javascript,Node.js,Eslint,我最近提取了一个名为sendTextMessage的函数,但没有将其修改到自己的模块中,这样我就可以在不同的位置重复使用它。我想知道前面的位置是否正确地引用了模块内的函数,但除了模拟一些系统函数和编写单元测试之外,找不到其他简单的方法 在编译语言中,“此函数定义是否正确”的问题会很快得到回答,但在JavaScript/Node中,我假设您需要: 运行代码-工作量太大;我需要为调用这个特定路径设置一个完美的条件 编写单元测试-是的,但我现在没有单元测试;有没有更简单的方法来实现我的目标 等待指标-

我最近提取了一个名为
sendTextMessage
的函数,但没有将其修改到自己的模块中,这样我就可以在不同的位置重复使用它。我想知道前面的位置是否正确地引用了模块内的函数,但除了模拟一些系统函数和编写单元测试之外,找不到其他简单的方法

在编译语言中,“此函数定义是否正确”的问题会很快得到回答,但在JavaScript/Node中,我假设您需要:

  • 运行代码-工作量太大;我需要为调用这个特定路径设置一个完美的条件
  • 编写单元测试-是的,但我现在没有单元测试;有没有更简单的方法来实现我的目标
  • 等待指标-如果我破坏了某些东西,我会在指标中看到它,但这意味着,我正在破坏生产
  • ESLint?-我可以通过ESLint检查这种情况吗
  • 还有什么吗?
  • 在下面的示例代码中,我最近刚刚从
    rementers.js
    提取了
    sendTextMessage
    twilio.js
    ,并希望确保在
    rementers.js
    中正确定义该函数

    定义模块(twilio.js):

    const accountSid = '...';
    const authToken = '...';
    const twilio = require('twilio')(accountSid, authToken, {
      // US West Coast
      edge: 'umatilla',
    });
    
    async function sendTextMessage(message, recipientNumber) {
      return twilio.messages.create({
        from: '+...',
        body: message,
        to: recipientNumber,
      });
    }
    
    module.exports = {
      twilio,
      sendTextMessage, // Recently exported function!
    };
    
    
    const {
      sendTextMessage,
    } = require('./deps/twilio');
    
    ...
    // Question: was sendTextMessage correctly extracted out to twilio.js and does my code actually reference it here correctly? 
    await sendTextMessage(reminderMessage, participantPhoneNumber);
    ... 
    
    消费模块(rementers.js):

    const accountSid = '...';
    const authToken = '...';
    const twilio = require('twilio')(accountSid, authToken, {
      // US West Coast
      edge: 'umatilla',
    });
    
    async function sendTextMessage(message, recipientNumber) {
      return twilio.messages.create({
        from: '+...',
        body: message,
        to: recipientNumber,
      });
    }
    
    module.exports = {
      twilio,
      sendTextMessage, // Recently exported function!
    };
    
    
    const {
      sendTextMessage,
    } = require('./deps/twilio');
    
    ...
    // Question: was sendTextMessage correctly extracted out to twilio.js and does my code actually reference it here correctly? 
    await sendTextMessage(reminderMessage, participantPhoneNumber);
    ... 
    

    首先,为typescript提供一个快速插件;您提到“编译语言不会受到此问题的影响”,而javascript会。但是,如果代码是一个typescript项目,它将以您想要的方式进行检查。在下一个项目中记住这一点。或者您可以对当前项目应用typescript检查

    这里有一些答案

    一-编写单元测试。如果你不能,那么,这对代码库来说是个坏兆头。尽管如此,还是要为自己编写测试。你必须学会如何模仿,反过来你也将学会如何编写更容易测试的代码

    第二,熟悉javascript语法。在某些情况下,您需要能够排除此类错误的可能性。除非您的代码库覆盖了
    require
    ,否则这种行为是可以预测的

    我认为eslint不能静态分析模块,尤其是在使用
    require
    时。比我聪明的人也许能解释原因;我不能

    第三,也是最重要的一点——在代码和prod之间是否没有中间地带?没有本地开发或登台环境?那么,如果不按prod,就无法运行应用程序?在这种情况下,继续冒险破坏prod;上级有人在做错误的决定,需要学习