npm文档说明了这一点:
- 如果您要在程序中安装要使用的东西,请使用require('whatever'),然后在项目的根目录下在本地安装.
- 如果您要在shell中安装要在shell中使用的东西,请在命令行或其他东西上安装它,以便全局安装它,以便它的二进制文件最终位于PATH环境变量中.
我目前正在编写---或者,至少尝试编写---一个真正的命令行程序,该程序用于从shell中使用.因此,根据以上所述,我的依赖项应该作为全局模块安装.
如何在节点中实际使用与npm一起安装的全局模块?require()当然,调用不起作用,因为/usr/local/lib/node_modules默认情况下npm全局模块目录()不在路径上.我可以通过明确地将它添加到程序顶部的路径来使其工作,但这是一个非常糟糕的解决方案,因为它不可移植 - 它需要知道npm的全局模块目录在任何给定系统上的位置.
为了让生活更加恶化,我通过dpkg安装了一些全局模块.这些已被放入/usr/lib/nodejs,他们只是工作.这让我感到困惑,因为如果全局模块不应该用于普通应用程序,我会期望它们不会在路径上; 或者我希望他们都在路上,并要求全球模块在任何地方工作.拥有一个而不是另一个似乎很奇怪.这里发生了什么?
更新:我应该指出,这个程序只是一个脚本,#!/usr/bin/env nodejs位于顶部; 它不是一个正式的节点模块,这对于一些非常微不足道的东西来说太过分了.由于Debian模块都需要这样的脚本,我觉得npm的全局模块也应该是必需的,但我觉得这是一个Debianism ...
因此,根据上面的内容,我的依赖项应该安装为全局模块。
不完全的。
这意味着您的模块可以作为全局安装,因此可以从 shell 获取其二进制文件:
npm install -g your-module
your-module-binary --option etc.
Run Code Online (Sandbox Code Playgroud)
另一方面,它的依赖项应该在第一点之后安装,驻留在node_modules项目内的目录中(通常在可以管理它们的目录中指定package.json)npm。
但是,全局模块(通常)不可用于require. 它们不遵循从文件夹加载node_modules(npm本地模块遵循从文件夹加载),并且它们的路径通常不会在从全局文件夹加载的NODE_PATH变量中列出。
因此,您的说明与 npm 模块有关,但您正在进行本地开发。以下是一些指南。
就您的源代码而言,您只需要两种类型的require语句
var dep = require('somedep')
Run Code Online (Sandbox Code Playgroud)
将此用于fs您的库需要通过 npm 包含的任何核心模块(例如 )和第三方模块(将它们作为依赖项列在 package.json 中)。在这里,您指定一个非限定的包名称,节点会根据其搜索算法找到该模块。
var mymod = require('./lib/mymod')
Run Code Online (Sandbox Code Playgroud)
使用它可以通过相对于当前 javascript 文件的路径来要求项目本身中的其他模块。
这就是处理 javascript 依赖项所需要做的全部工作。
好的,现在如何安装依赖项?
对于本地开发(在项目的源代码树中),只需 cd 进入项目目录并运行npm install,它将读取您的package.json文件并在子目录中安装您需要的模块node_modules,并且一切都将适合本地开发。
如果您实际上要将其发布为 npm 模块,其他用户(您可以既是开发人员,也可以是“其他用户”之一),npm -g如果他们想要访问您项目的二进制实用程序,PATH则可以安装它包含/usr/lib/nodejs/lib/node_modules,但在这种情况下,npm -g将同时处理安装您的代码和项目的依赖项。
这就是你感到困惑的地方。
因此,根据上面的内容,我的依赖项应该安装为全局模块。
您不需要显式地将依赖项安装为全局变量,只需安装您感兴趣的顶级模块,在本例中就是您的项目本身。npm 将自动处理依赖关系,这是它的主要目的。您的项目的依赖项不会全局安装,而是安装在node_modules项目的子目录中,该子目录将全局安装。
这是目录和其中的内容:
~/yourproject:源代码的本地开发~/yourproject/node_modules:您的项目在开发过程中使用的 npm 模块。npm install通过运行创建/填充~/yourproject/usr/lib/nodejs/lib/node_modules:全局安装的 npm 模块(如果您将其发布到 npm 注册表,最终可能包括您的项目)/usr/lib/nodejs/lib/node_modules/yourproject/node_modules:当您这样做时,您的项目的依赖项将安装在这里npm install -g yourproject您还可以找到我关于管理解释器和相关 PATH 的博客文章。
| 归档时间: |
|
| 查看次数: |
9360 次 |
| 最近记录: |