最近node docs表示修改require.paths
是不好的做法。我该怎么做呢?nodejs - 使用什么来代替require.paths?
回答
我相信关心的是它可以在运行时反复修改,而不是仅仅设置。这显然可能会造成混乱,并导致一些非常奇怪的错误。另外,如果单个软件包修改路径,则结果将全局应用,这非常糟糕,并且与节点的模块化特性背道而驰。
如果您有自己的几个库路径,最好的解决方案是在启动节点之前设置NODE_PATH环境变量。然后,节点在启动时自动将其选中并自动应用。
我把相关车型在同一个目录或子目录和负载使用:
var x = require('./mod/x');
如果它是一个外部模块,我使用NPM是正确放模块在NODE_PATH它安装。
我从来没有改变require.paths。
对于我的用例,我想在本地'deps /'文件夹中保留特定版本(可能已修补)的本地副本。也许修改NODE_PATH是正确的方法,但这意味着要编写一个启动脚本... – nornagon 2011-03-02 03:05:40
您不需要使用相对路径的模块:var x = require('../ deps/c'); ?我从来没有这样做,但看到了某个地方。 – Carlosedp 2011-03-02 12:58:02
@nornagon我知道这是旧的,但我发现最好的解决方案是将符号链接添加到'node_modules'指向'deps /'目录中的每个模块。然后你可以参考它们,就好像它们是普通模块一样。确保为每个添加的'node_modules'符号链接更新'.gitignore',以便将符号链接检入源代码管理。这是hacky,但它的作品。 – vaughan 2013-03-30 07:35:47
看看https://github.com/patrick-steele-idem/app-module-path-node;您可以将目录添加到顶级中的require
语句,而不影响子模块的路径。
我一直在使用这个模块。它工作得很好。 – vaughan 2015-06-10 17:23:20
如果你只需要做一个快速入门,你可以在另一个函数中简单地包装require('module')。Module._nodeModulePaths。请记住,以这种方式改变模块路径仍然是不好的做法。 – 2017-01-24 15:21:49
- 1. 用什么来代替div?
- 2. 用什么来代替$ .mobile.changePage()?
- 3. 用什么来代替GraphDatabaseSettings.BoltConnector?
- 4. 用什么来代替sun.net.www.protocol.http.HttpURLConnection.userAgent?
- 5. 用什么来代替PrintWriter?
- 6. 使用什么来代替“com.google.appengine.repackaged.com.google.common.hash.Hashing”?
- 7. 使用什么来代替SimpleJdbcTestUtils?
- 8. 使用什么来代替QTCaptureDevice?
- 9. 使用什么来代替$(document).ready();?
- 10. 使用什么来代替org.jboss.resteasy.client.ClientRequest?
- 11. 使用什么来代替异常?
- 12. 我可以用什么来代替char.to_i?
- 13. 我可以用什么来代替GridView?
- 14. 我可以用什么来代替KeyChar?
- 15. 我应该用什么来代替stmt.executeUpdate()?
- 16. 用什么来代替jQuery模板?
- 17. 我应该用什么来代替AddPort?
- 18. 我应该用什么来代替DS.FixtureAdapter
- 19. 安卓:用什么来代替光标
- 20. 应该用什么来代替sun.net.www.protocol.jar.Handler?
- 21. 用什么来代替OnActionExecuting? ASP.NET MVC
- 22. 我可以用什么来代替?
- 23. 什么可以用来代替ob_start(“ob_gzhandler”);
- 24. 用什么来代替CDebuggerTab类?
- 25. 用什么来代替NSOutlineViewDataSource outlineView:draggingSession:endedAtPoint:operation:?
- 26. 我应该用什么来代替FlowLayout()?
- 27. 用什么来代替std :: map :: emplace?
- 28. 我应该用什么来代替LoadWithPartialName()?
- 29. 我应该用什么来代替Directory.SetCurrentDirecory?
- 30. 我应该用什么来代替.__ getslice__?
这将需要一个额外的外部脚本来运行该应用程序,这是不洁的。 – 2012-01-17 22:15:53
为了防止任何人在这个答案中绊倒,现在这个问题在节点和npm如何朝着沙盒开发方向发展方面已经有点学术了。 – leebriggs 2012-03-13 21:18:07
@leebriggs你能解释一下你最近的评论吗? – 2015-08-05 11:26:22