npm 3.x 和模块 package.json 中的本地路径
Posted
技术标签:
【中文标题】npm 3.x 和模块 package.json 中的本地路径【英文标题】:npm 3.x and local paths in module's package.json 【发布时间】:2016-02-01 01:09:12 【问题描述】:最近我用 npm 3.x 安装了一个新的 nodejs 5.x - 最显着的变化是 node_modules 中的扁平结构 - 这在 Windows 环境中是件好事。
不幸的是,我注意到新的 npm 将所有已安装模块的本地路径放在 package.json 中。我怎样才能防止这种情况(或放在那里相对路径)?我想将我的 node_modules 提交到 hg 存储库,因此开发团队中的每个人都将拥有相同的模块。这是从 abbrev 包中剥离的 package.json 示例:
"_args": [
[
"abbrev@https://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz",
"C:\\Users\\ABC\\Documents\\ABC"
]
],
"_where": "C:\\Users\\ABC\\Documents\\ABC"
“C:\Users\ABC\Documents\ABC”是本地路径
最好的问候,
【问题讨论】:
听起来像是npm shrinkwrap
的用途。 docs.npmjs.com/cli/shrinkwrap
不幸的是,收缩包装的包也有由 npm manager 编写的本地路径。
我的意思是你可以运行npm shrinkwrap
并将生成的文件npm-shrinkwrap.json
提交到你的项目中——这个文件中没有相对路径,只有包名和版本。签出此项目的其他人只是从该文件安装并获得完全相同的版本。问题解决了。无需提交整个node_modules
并处理兆字节的差异日志。
这种方法的问题是存储库不包含所有需要的模块 - 我们正在使用 Jenkis 构建工具,我们希望避免每次构建都获取所有模块(我们每时间)。
你找到答案了吗?
【参考方案1】:
这将在 npm@5 中修复,npm@5 正式发布
npm install npm@latest -g
【讨论】:
这对任何人都有效吗?我仍然得到带有_where
的package.json
文件,包括完整的绝对路径和npm --version
说6.14.10
。
正如github.com/npm/npm/issues/10393 中所解释的,似乎npm
使用以下划线开头的属性(如_where
)作为穷人的日志,而不是为npm install
实施适当的日志记录。似乎没有人知道他们为什么这样做。以上是关于npm 3.x 和模块 package.json 中的本地路径的主要内容,如果未能解决你的问题,请参考以下文章