所以我需要package.json
在通过npm安装新软件包之前阅读.
我正在使用npm用于CSS组件,这些组件是单独版本化的并且可以具有相互依赖性.(没有提供javascript)
寻找一堆依赖项的版本冲突,我需要在package A
需要时检测package C@1.0.0
并package B
要求package C@2.0.0
和处理它.
Npm(从版本3开始)通过在树内更深层地嵌入冲突模块来处理这些问题.您现在最终得到了同一模块的两个版本.CSS有一个全局命名空间,然后mixin(在Sasss的情况下)会相互覆盖并破坏你的CSS.
这个平面依赖问题在npm博客中得到了很好的概述:http://blog.npmjs.org/post/101775448305/npm-and-front-end-packaging
即使没有考虑我们的特定用例,我也很奇怪你没有访问package.json
in preinstall
和postinstall
脚本.它们似乎只适用于该用例.
我package.json
正在安装的软件包看起来像这样:
{
"name": "testmodule",
"version": "0.3.6",
"description": "TODO",
"scripts": {
"preinstall": "npm i some-script && some-script",
},
"author": "TODO",
"license": "MIT"
}
Run Code Online (Sandbox Code Playgroud)
在some-script
我运行的那个包里面:
console.log( process.cwd() );
console.log( __dirname );
Run Code Online (Sandbox Code Playgroud)
然后我跑:
~/path/to/folder $ npm i testmodule
Run Code Online (Sandbox Code Playgroud)
这将导致:
$ npm i testmodule
> testmodule@0.3.6 preinstall /path/to/folder/node_modules/.staging/testmodule-5cc9d333
> some-script
/path/to/folder/node_modules/.staging/test-module-5cc9d333
/path/to/folder/node_modules/.staging/test-module-5cc9d333/node_modules/some-script
Run Code Online (Sandbox Code Playgroud)
现在我完全明白,我无法真正访问运行位置的根,npm i
因为我的脚本是由npm的子进程运行的,并且具有完全不同的根.
然后我想npm root
应该跟踪实际根对我的位置,并将其作为参数从testmodule package.json中传递给我的脚本:
{
"name": "testmodule",
"version": "0.3.6",
"description": "TODO",
"scripts": {
"preinstall": "npm i some-script && some-script \"$(npm root)\"",
},
"author": "TODO",
"license": "MIT"
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,它也默认返回到临时路径:
/path/to/folder/node_modules/.staging/testmodule-5cc9d333/node_modules
Run Code Online (Sandbox Code Playgroud)
我向注册管理机构提出了一个问题,但没有抱怨我们及时赶到.此外,我的脚本需要在旧的npm安装上工作.
与此同时,我在我的内心想出了类似的东西some-script
:
let pgkPath = process.cwd().split('/node_modules/')[0];
Run Code Online (Sandbox Code Playgroud)
这将返回/path/to/folder/
哪个是正确的,但它使得假设没有人npm i
在一个偶然命名的文件夹内运行node_modules
...似乎hacky.
如何从通过预安装运行的npm脚本中访问package.json的路径?对我而言,这似乎不是太过于无法要求的东西?
我不完全理解您的用例,但要回答您package.json
从预安装脚本中查找父级的具体问题:
$(cd .. && npm prefix)
作为参数传递给脚本,然后加载./package.json
.
npm prefix
将返回包含package.json
文件的最近父目录,当从该目录调用该文件时..
,应返回父 npm 包的路径。
{
"name": "testmodule",
"version": "0.3.6",
"description": "TODO",
"scripts": {
"preinstall": "npm i some-script && some-script \"$(cd .. && npm prefix)\"",
},
"author": "TODO",
"license": "MIT"
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1391 次 |
最近记录: |