我的目标是在发布 Node 模块之前指定哪些文件将包含在 Node 模块中,并能够在本地测试安装。使用 package.json 中的"file"的效果是,如果我发布包并安装它,那么我只能获得"file"中指定的内容。
当我使用 npm 链接时,情况并非如此。无论是 package.json 中的"file"还是 .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,但是如果您查看 Node 模块中的内容,就会发现自述文件中使用了很多无关的文件,例如 PNG。因此模块变得异常巨大。
更新:
npm install <path>
根据此处的答案和 stackoverflow 上的其他答案,似乎尊重 package.json 中的"file"。我不能代表其他系统,但对于 Fedora Linux 上的 npm v 6.9.0,这不起作用,因为所有文件仍然被复制。
示例:
如果您需要一个已发布的模块来测试此场景,我最近发布了没有依赖项的 num2cheque。如果您使用
从 npm 注册表安装它,您会看到npm install num2cheque
您没有收到我本地的测试目录,因为我在 package.json 中指定了
"files": [lib]
将测试目录添加到本地安装,然后尝试使用 npm link 或 npm install 和路径,您将看到测试目录现已包含在内。希望能说明问题。
最佳答案
解决方法:npm install
GIT 存储库 URL
您可能想从 GIT 存储库安装软件包,例如
npm install https://github.com/AndreasPizsa/parse-decimal-number.git
这是一个实际的 npm install
,它尊重 files
条目,即使该包尚未发布到 npm 存储库。
背景
npm link
不会复制,它会创建一个链接
npm link
确实没有通过将包复制到目标文件夹来实际安装该包。
相反,它会创建一个指向源文件夹的符号链接(symbolic link),这就是为什么您会看到源文件夹(“node-redis”)中的所有文件,而不仅仅是在文件
。
此行为记录在 npm 链接
文档中:
First, npm link in a package folder will create a symlink in the global folder {prefix}/lib/node_modules/ that links to the package where the npm link command was executed. (see npm-config for the value of prefix). It will also link any bins in the package to {prefix}/bin/{name}.
Next, in some other location, npm link package-name will create a symbolic link from globally-installed package-name to node_modules/ of the current folder.
“什么是符号链接(symbolic link)?”您可能会问:
a symbolic link (also symlink or soft link) is a term for any file that contains a reference to another file or directory in the form of an absolute or relative path and that affects pathname resolution.
如果您担心硬盘空间的使用,请不用担心 - 不会复制或重复任何内容,只会链接(就像链接到维基百科不会重复它一样,它实际上节省了空间)
...本地运行 npm install
也是如此
npm install
以及包的路径还将创建指向相关包的符号链接(symbolic link)。一个有用的场景可能是仍在开发中的模块。
cd ~/projects/node-bloggy
npm install ~/projects/node-redis
这将在您的 node-bloggy
项目中的 node_modules
下创建一个符号链接(symbolic link)。
关于node.js - npm 链接不关心 package.json 或 .npmignore 中的 "files",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46679732/