我需要能够在动态相对路径上使用require() - 这意味着相对路径需要根据当前环境进行更改。
此类情况的最佳做法是什么?
我想到了这样的事情:
var module = require(process.env.MY_MODULES_PATH + '/my-module');
但是环境变量不是很方便。
还有其他可能吗?
修改
我刚才意识到这是require()
"嘲笑"的一个特例。例如,对于单元测试如何模拟require()
是否有最佳实践?
答案 0 :(得分:0)
MockedRequire.js
var path = require('path');
function MockedRequire(module) {
return require(path.join('/path/to/modules', module));
}
module.exports = MockedRequire;
使用:
var mymodule = require('./MockedRequire.js')('mymodule');
说实话,我实际上并没有对此进行测试,但它应该没有问题。
答案 1 :(得分:0)
我建议使用配置加载程序。它将根据您的NODE_ENV变量选择路径,但它比您建议的更清晰,因为您将所有特定于环境的配置保存在单个外部文件中。
示例:
答案 2 :(得分:0)
Webpack需要知道在编译时要捆绑哪些文件,但表达式只在运行时给出值,需要require.context:
/* If structure like:
src -
|
-- index.js (where these code deploy)
|
-- assets -
|
--img
*/
let assetsPath = require.context('./assets/img', false, /\.(png|jpe?g|svg)$/);
// See where is the image after bundling.
// console.log(assetsPath('./MyImage.png'));
// In fact you could put all the images you want in './assets/img', and access it by index: './otherImg.jpg'
var newelement = {
"id": doc.id,
"background": assetsPath('./MyImage.png');
};