修改nodejs require()以搜索.min.js

时间:2018-02-20 11:11:45

标签: node.js

O / S是ubuntu 16,节点版本是4.2.6。

我有源/开发代码和运行/分发代码,source.js文件被缩小和修改以创建等效的source.min.js文件,我希望节点js require自动搜索.min.js文件以及.js文件。

但由于我有很多文件,我宁愿不必在每个文件中检查每个需求,而是修改内置的require()函数。

这是一个非常简单的独立函数实现,但是如何修改内置函数的行为方式相同?

function require(file){
    try{return require(file)} 
    catch(e){return require(file+='.min.js')}
}

1 个答案:

答案 0 :(得分:0)

您可以通过修改require的原型函数Module class并全局应用

来实现此目的

以下是如何做到这一点:

var pathModule = require('path');
var assert = require('assert').ok;

module.constructor.prototype.require = function (path) {
    var self = this;
    assert(typeof path === 'string', 'path must be a string');
    assert(path, 'missing path');

    try {
        return self.constructor._load(path, self);
    } catch (err) {
        // if module not found, we have nothing to do, simply throw it back.
        if (err.code === 'MODULE_NOT_FOUND') {
            throw err;
        }
        // resolve the path to get absolute path
        path = pathModule.resolve(__dirname, path+".min.js")

        // Write to log or whatever
        console.log('Error in file: ' + path);
    }
}