Node.js动态相对路径
我需要能够在动态相对路径上使用require(),这意味着相对路径需要根据当前环境进行更改 对于这种情况,最佳做法是什么 我想到了这样的事情:Node.js动态相对路径,node.js,require,Node.js,Require,我需要能够在动态相对路径上使用require(),这意味着相对路径需要根据当前环境进行更改 对于这种情况,最佳做法是什么 我想到了这样的事情: var module = require(process.env.MY_MODULES_PATH + '/my-module'); 然而,环境变量不是很方便 还有其他的可能性吗 也许可以使用package.json安装后脚本为我设置环境变量 也许在我不知道的节点中有一个内置的解决方案 编辑 我刚刚意识到这是require()“mocking”的一个
var module = require(process.env.MY_MODULES_PATH + '/my-module');
然而,环境变量不是很方便
还有其他的可能性吗
- 也许可以使用package.json安装后脚本为我设置环境变量
- 也许在我不知道的节点中有一个内置的解决方案
require()
“mocking”的一个特例。例如,对于单元测试如何模拟require()
,是否有最佳实践?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');
老实说,我还没有实际测试过它,但它应该可以正常工作。我建议使用配置加载程序。它将根据NODE_ENV变量选择路径,但比您建议的要干净得多,因为您将所有特定于环境的配置保存在一个外部文件中 示例:
- 滚你自己的
- Webpack需要知道在编译时捆绑哪些文件,但表达式只能在运行时给定值,您需要:
在任何情况下都应该使用。模块是否总是相对于当前路径?例如,您可以执行
require('../some/directory/my module')
上下两个目录some/directory/my module
。环境变量到底有什么不便之处?这是一个问题吗?这很不方便,因为这是我的代码之外的东西,可以随时更改。例如,我更喜欢配置文件——它们更明显、更容易理解intuitive@Randy-不,我需要能够路由到每个环境上的不同路径,而不管当前路径如何。这并不能解决我描述的问题。我需要能够控制/path/to/modules
在不同的环境中是不同的。你所做的只是提供了一个模块,它完全符合我所知道的……你说你不想使用环境变量。因此,另一种选择是使用带有“设置”的文件。实际上,这可能是用于更改所需路径的设置文件。因此,在System X上,您可以使用路径为/path/to/modules
的文件,在System Y上,您可以使用路径为/other/path
的类似文件。或者,如果它是基于操作系统的,那么您只需在需要时检查操作系统()。基于你的问题,你只想改变道路。这里有一个方法。
/* 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');
};