服务器端Javascript是否有类似Java类路径的功能

Is there a Java classpath-like feature for server-side Javascript?

本文关键字:路径 功能 Java 是否 服务器端 Javascript      更新时间:2023-09-26

在Java中使用JUnit和Maven时,src/mainsrc/test可以有单独的属性文件。这允许对代码和测试进行不同的配置,让Maven通过使用Java类路径来管理资源。

Node.js运行的Javascript代码中有类似的方法吗?我使用Mocha进行单元测试,使用Grunt进行任务管理。

script.js:的代码示例

var config = require('./config/dev/app.js');
exports.getFileName = function() {
    return config.fileName; // returns 'code.txt'
}

test.js单元测试需要时,我需要的是让script.js使用不同的配置文件,如下所示:

var assert = require('assert');
var s = require('./script.js');
describe('Test', function () {
    it('should use different config file', function() {
        assert.equal('test.txt', s.getFileName());
    });
});

有没有一种方法可以在script.js中使用不同配置的./config/test/app.js,而不必更改script.js的代码?我真正想避免的是调整代码以支持单元测试。相反,我希望实现类似的功能,比如前面提到的Java类路径。

请尝试此代码。

Script.js

var config;
if(process.env.dev===true){
   config = require('./config/dev/config.js');
}
if(process.env.prod===true){
   config = require('./config/prod/config.js');
}

exports.getFileName = function() {
    return config.fileName; // returns 'code.txt'
}

test.js

//set the environment here
process.env.dev = true;
var assert = require('assert');
var s = require('./script.js');
describe('Test', function () {
    it('should use different config file', function() {
        assert.equal('test.txt', s.getFileName());
    });
});

我在网上没有找到任何优雅的解决方案,所以我已经实现并发布了自己的解决方案。点击此处查看:https://npmjs.org/package/app-config

使用app-config插件,只有script.js需要这样更改:

var config = require('app-config').app;
exports.getFileName = function() {
    return config.fileName; // returns 'code.txt'
}

应用程序需要以这种方式运行,例如

  1. NODE_ENV=dev node script.js
  2. NODE_ENV=unitTest mocha test.js

根据NODE_ENV环境变量,app-config插件将加载正确的配置文件集。