避免../../../../../../ ..
并非应用程序中的所有内容都正确属于公共npm,并且在许多情况下,设置私有npm或git repo的开销仍然很大。这里有一些避免
../../../../../../../
相对路径问题的方法。
node_modules
人们有时会反对将特定于应用程序的模块放入node_modules中,因为在不从npm检入第三方模块的情况下,如何检入内部模块并不明显。
答案很简单!如果您有一个.gitignore
忽略的文件node_modules
:
node_modules
您可以!
为每个内部应用程序模块添加一个例外:
node_modules/*
!node_modules/foo
!node_modules/bar
请注意,你不能屏蔽的子目录,如果父已被忽略。所以,不是忽略的node_modules
,你必须忽略每一个目录内 node_modules
与
node_modules/*
技巧,然后您可以添加您的例外。
现在,在应用程序中的任何位置,您都可以拥有require('foo')
或require('bar')
不拥有非常大且脆弱的相对路径。
如果你有很多的模块,并希望让他们从NPM安装的第三方模块更独立的,你可以把它们放在一个目录下node_modules
,例如node_modules/app
:
node_modules/app/foo
node_modules/app/bar
现在,您将能够require('app/foo')
或require('app/bar')
在应用程序的任何地方。
在您的中.gitignore
,只需添加一个例外node_modules/app
:
node_modules/*
!node_modules/app
如果您的应用程序在package.json中配置了转换,则您需要在您node_modules/foo
或您的node_modules/app/foo
组件目录中创建一个单独的package.json及其自己的转换字段,因为转换不会跨模块边界应用。这将使您的模块对应用程序中的配置更改更健壮,并且更容易在应用程序外部独立地重用软件包。
符号链接
如果您正在开发可以进行符号链接而不需要支持Windows的应用程序,则另一个方便的技巧是将lib/
或app/
文件夹符号链接到中node_modules
。在项目根目录中,执行以下操作:
ln -s ../lib node_modules/app
现在,您可以从项目中的任何位置lib/
通过require('app/foo.js')
获取获取文件lib/foo.js
。
自定义路径
您可能会看到一些地方谈论使用$NODE_PATH
环境变量或opts.paths
为节点添加目录,并通过浏览器查找来查找模块。
与大多数其他平台不同,$NODE_PATH
与有效使用node_modules
目录相比,在节点中使用带有路径目录的外壳样式数组的效果不佳。
这是因为您的应用程序与运行时环境配置之间的联系更加紧密,因此有更多的活动部件,并且您的应用程序只有在正确设置环境后才能运行。
node和browserify都支持,但不鼓励使用
$NODE_PATH
。