Javascript 编写commonjs模块并使用require加载(不使用相对路径)
引用本地commonjs模块而不使用以下相对路径的最佳实践是什么Javascript 编写commonjs模块并使用require加载(不使用相对路径),javascript,node.js,commonjs,Javascript,Node.js,Commonjs,引用本地commonjs模块而不使用以下相对路径的最佳实践是什么 var custMod= require(‘customModule’); custMod(true); custMod.save(‘foo’); 构建这样一个模块有什么参考吗 若我像下面这样编写模块,那个么当我调用custMode.save(12)时,就会得到未定义的模块 您可以为require添加路径,以便使用 require.paths.push('/my/path'); 或 取决于您的节点版本 如果customModu
var custMod= require(‘customModule’);
custMod(true);
custMod.save(‘foo’);
构建这样一个模块有什么参考吗
若我像下面这样编写模块,那个么当我调用custMode.save(12)时,就会得到未定义的模块
您可以为
require
添加路径,以便使用
require.paths.push('/my/path');
或
取决于您的节点版本
如果customModule.js
存在于/my/path/customModule.js
,您可以使用
require('customModule');
不过请注意,您需要在打算使用此方法的每个模块上都执行此操作。老实说,我希望node能让这更容易实现。一种可能性:
project_root
`--node_modules
|--npm-module-1
|--npm-module-2
|--... (etc)
`--lib
|--my-module.js
`--my-other-module.js
project_root
|--node_modules
| |--npm-module-1
| |--npm-module-2
| `--... (etc)
`--lib
`--node_modules
|--my-module.js
`--my-other-module.js
使用上面的内容,您可以在项目中的任何位置键入require('lib/my module')
。(请确保不要安装名为lib
:)的npm模块)另一种可能性:
project_root
`--node_modules
|--npm-module-1
|--npm-module-2
|--... (etc)
`--lib
|--my-module.js
`--my-other-module.js
project_root
|--node_modules
| |--npm-module-1
| |--npm-module-2
| `--... (etc)
`--lib
`--node_modules
|--my-module.js
`--my-other-module.js
使用以上内容,您可以键入require('my-module')
,但仅限于project\u root/lib/
下的任何文件
前一种方法的一个优点是,
require('lib/my module')
可以非常容易地一目了然地判断哪些模块是项目的本地模块。但是后者的类型较少。您是否在问如何编写注入全局变量的模块?或者如何创建具有自定义属性的函数?你说的“这个”到底是什么?@FelixKling我问的是如何编写一个注入全局变量并可以使用require函数加载的模块。仍然不能100%确定你在问什么,但我已经根据我的假设添加了一个答案。“注入全局变量”是什么意思?每个模块都可以加载require
。应避免注入全局变量。模块的加载方式(即通过直接路径或名称)不受模块本身的影响。这取决于节点环境的设置方式。这可能有助于理解这个问题:“否则,您将需要npm链接或将您的模块添加到npm中。”不是真的。真正需要做的是模块位于包的节点\u modules
文件夹中npm
只是让这更方便。但是是的,添加到npm变得更实用了,因为它提供了私有模块。@FelixKling你说得对,删除了。我不认为这是我想要的,但我可以发誓有一个NPM cli标志,可以将文件夹复制到node\u modules
。是的,我认为这就是NPM link所做的(它将模块链接到当前包)。我只是说你不需要它(我想我太挑剔了;)