npm链接不关心package.json或.npmignore

时间:2017-10-11 04:16:30

标签: node.js npm package.json npmignore

我的目标是在发布之前指定我的节点模块中包含哪些文件,并能够在本地测试安装。使用package.json中的“files”,如果我发布我的包并安装它,那么我只得到“files”中指定的内容。

当我使用npm链接时不是这种情况。无论是package.json中的“文件”还是.npmignore,npm链接似乎总能给我每个文件。如何在本地测试我的模块安装?

例如:

cd ~/projects/node-redis    # go into the package directory
npm link                    # creates global link
cd ~/projects/node-bloggy   # go into some other package directory.
npm link redis              # link-install the package

如果〜/ projects / node-redis在其package.json中有“files:[lib]”,那么在运行“npm link redis”之后,你会期望只有lib出现在〜/ projects / node-bloggy中,但是事实并非如此。

除了: 我喜欢node和npm,但是如果你看看你的节点模块中有什么,那么自述文件中使用的PNG就会有很多无关的文件。由于这个原因,模块非常庞大。

1 个答案:

答案 0 :(得分:6)

解决方法:npm install GIT存储库URL

您可能想从GIT存储库中安装软件包,例如

npm install https://github.com/AndreasPizsa/parse-decimal-number.git

这是一个实际的npm install,它尊重files条目,即使该软件包尚未发布到npm存储库中。


背景

npm link不复制,它创建一个链接

npm link不会通过将软件包复制到目标文件夹中来实际安装该软件包。

相反,它会创建到源文件夹的符号链接,这就是为什么您看到源文件夹中所有文件的原因(“ node-redis”),而不仅仅是在files

npm link文档中记录了此行为:

  

首先,包文件夹中的npm链接将在   全局文件夹{prefix} / lib / node_modules /链接到   执行npm link命令的软件包。 (有关详细信息,请参见npm-config   前缀的值)。它还会将包装中的所有垃圾箱链接到   {prefix} / bin / {name}。

     

接下来,在其他位置,npm link package-name将创建一个   从全局安装的程序包名称到node_modules /的符号链接   当前文件夹。

     

https://docs.npmjs.com/cli/link.html

“什么是符号链接?” ,您可能会问:

  

符号链接(也称为符号链接或软链接)是任何文件的术语,该文件以绝对或相对路径的形式包含对另一个文件或目录的引用,并且会影响路径名的解析。

     

https://en.wikipedia.org/wiki/Symbolic_link

如果您担心的是硬盘空间的使用,不用担心-复制或复制任何内容,仅链接(就像链接到Wikipedia不会重复一样,实际上可以节省空间)

...,因此在本地运行npm install

带有包路径的

npm install还将创建指向相关包的符号链接。一个有用的方案可能是仍在开发中的模块。

cd ~/projects/node-bloggy
npm install ~/projects/node-redis

这将在您的node_modules项目的node-bloggy下创建一个符号链接。