【问题标题】:how to dynamically load a script (node js)如何动态加载脚本(node js)
【发布时间】:2018-07-17 01:12:46
【问题描述】:

所以,在我的 nodeJS 服务器部分,我需要使用 js 文件中的函数。这个文件经常更新,所以每次客户端加载页面时我都需要动态加载这个文件。我怎么能做到这一点?谢谢!

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    使用require 从其他文件加载代码。然而,一旦你 require'd 一个文件,再次要求它不会再次从磁盘加载文件,而是从 Node 维护的内存缓存加载文件。要重新加载文件,您需要在再次调用 require 之前删除文件的缓存条目。

    假设您的文件名为/some/path/file.js

    // Delete cache entry to make sure the file is re-read from disk.
    delete require.cache['/some/path/file.js'];
    // Load function from file.
    var func = require('/some/path/file.js').func;
    

    包含该函数的文件如下所示:

    module.exports = {
      func : function() { /* this is your function */ }
    };
    

    【讨论】:

    【解决方案2】:

    除了@robertklep 的回答,这里是任何路径的解决方案:

    const path = require('path');
    
    var lib_path = './test' // <-- relative or absolute path                                                                  
    var file = require(lib_path);
    
    const reset_cache = (file_path) => {
        var p = path.resolve(file_path);
        const EXTENTION = '.js';
        delete require.cache[p.endsWith(EXTENTION) ? p : p + EXTENTION];
    }
    
    // ... lib changed                                                                                                             
    
    reset_cache(lib_path);
    file = require(lib_path); // file changed
    

    很遗憾,重新加载文件的所有依赖项也没有重新加载。

    另外,您可以使用clear-require 模块:

    const clear_require = require('clear-require');
    
    require('./foo');
    // ... modify
    clear_require('./foo');
    require('./foo');
    

    它可以清除所有模块,并处理正则表达式。

    【讨论】:

      【解决方案3】:

      这个非常简单的脚本让我很开心 :) github.com/isaacs/node-supervisor

      第一:

      npm install supervisor -g
      

      秒:

      supervisor myapp.js
      

      我有一些错误,但它有效。

      【讨论】:

      • 解释很差!你遇到了什么错误?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      • 2019-01-28
      • 2010-10-04
      • 1970-01-01
      相关资源
      最近更新 更多