我试图在安装任何软件包之前运行一些策略脚本.例如:
{
"name": "pre-hook-check",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"preinstall": "echo preinstall",
"postinstall": "echo postinstall"
},
"author": "",
"license": "ISC",
"dependencies": {
"abc": "^0.6.1",
"preact": "^8.2.5"
}
}
Run Code Online (Sandbox Code Playgroud)
上面的示例中的安装前和安装后脚本似乎只在我这样做时才有效npm install,但我希望每次尝试安装任何东西时都会运行.
例如:假设我想编写一个脚本,以便在我的团队运行时检查包的版本npm install <some package>.我想检查安装包的版本并验证它的版本是否高于"1.0.0",否则不要让它们安装.
我打算写一个预安装脚本
npm info lodash version
并检查我尝试安装的任何软件包的版本.如果版本不可用,我计划在安装之前将其设置为交互式并询问用户的确认.
在我的package.json我有一个包:
{
"somepackage": "^6.5.1"
}
Run Code Online (Sandbox Code Playgroud)
这个包有一个依赖项(来自somepackage's package.json):
{
"someotherpackage": "^9.4.2"
}
Run Code Online (Sandbox Code Playgroud)
我想将另一个包交换到它的一个叉子上。我知道纱线的Selective dependency resolution功能,但我想这仅适用于同一包的不同版本。
我也可以somepackage手动fork并更改其依赖项,交换someotherpackage到someotherpackage-fork,但如果有另一种方式,我会采取这种方式。
谢谢!
我们正在使用yarn这个项目,我们不想package.json用npm/ yarn命令混合编写脚本.
我有一个根目录,其中包含一些子文件夹.
每个人都有不同的服务.
我想在根文件夹中创建一个脚本,npm install每个服务一个接一个.
你知道什么是替代纱线npm install <folder>吗?
我正在寻找类似这个psuedo命令的东西: yarn <folder>
我正在使用纱线工作区,我在package.json中有这个包:
"workspaces":["packages/*"]我正在尝试创建要部署的docker镜像,我有以下Dockerfile:
# production dockerfile
FROM node:9.2
# add code
COPY ./packages/website/dist /cutting
WORKDIR /cutting
COPY package.json /cutting/
RUN yarn install --pure-lockfile && yarn cache clean --production
CMD npm run serve
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
error发生意外错误:" https://registry.yarnpkg.com/@cutting%2futil:Not found"
@ cutting/util是我的一个工作区包的名称.
所以问题是docker镜像中没有源代码,所以它试图从yarnpkg安装它.
部署到docker镜像时处理工作空间的最佳方法是什么?
说我的结构是:
root
|_node_modules
-----|_ package_1
-----|_package_2
-----|_package_3
-----|_deploy_pkg
Run Code Online (Sandbox Code Playgroud)
我想部署,deploy_pkg但我不知道如何创建一个我可以复制到docker镜像的包
我的码头工人
- FROM node:9.11.2-alpine
- RUN apk add yarn
Run Code Online (Sandbox Code Playgroud)
和错误:
yarn (missing): required by: world[yarn]
[91mWARNING: Ignoring APKINDEX.84815163.tar.gz: No such file or directory
WARNING: Ignoring APKINDEX.24d64ab1.tar.gz: No such file or directory
ERROR: unsatisfiable constraints:
The command '/bin/sh -c apk add yarn' returned a non-zero code: 1
[Sat Jun 23 2018 16:04:57 GMT+0100 (GMT Daylight Time)] ERROR Child process exited with code 1
Run Code Online (Sandbox Code Playgroud)
我不明白为什么将 Yarn 添加到 docker 如此困难。我尝试了很多东西,但都以某种方式失败了。
直到昨天,我才能够在我的 docker 上安装 Yarn,RUN npm install -g yarn但今天早上因错误而停止工作:
更改节点的nvm版本时,我遇到了yarn的问题。当我检查〜/ .nvm文件夹时,我注意到有两个节点版本。
我在全球安装了yarn。我在使用v8.11.0时使用npm install -g yarn。
我可以看到我的纱
.nvm/versions/node/v8.11.0
Run Code Online (Sandbox Code Playgroud)
但是,当我切换到nvm v8.11.3或将我的nvm别名默认设置为v8.11.3时,
纱不再可用。我尝试再次进行全局安装,希望将其添加到我的v8.11.3文件夹中,但它一直尝试将其添加到v8.11.0中
我什至删除了文件夹v8.11.0,但是在运行npm install -g yarn时它会重新创建它
如何安装它,以便可以在nvm中使用任何节点版本开关使用yarn
我使用的库支持另一个具有广泛版本的库作为对等依赖项。不幸的是,工作区的子项目之一拉入了与使用库的子项目不同的版本。结果,它们最终需要不同的版本。
我正在尝试使用选择性分辨率来处理这个问题并强制它使用正确的版本(https://yarnpkg.com/lang/en/docs/selective-version-resolutions/),但我没有任何运气。
我可能误解了如何利用这些。
我当前的设置是我有一个根工作区,里面有这些孩子:Project A package.json(这是问题的根源):
dependencies: {
backbone.marionette: '2.4.1'
}
Run Code Online (Sandbox Code Playgroud)
项目 B package.json(这是有问题的应用程序):
dependencies: {
backbone.marionette: '1.8.8',
@organization/UILibrary: '0.0.22'
}
Run Code Online (Sandbox Code Playgroud)
@organization/UILibrary(在工作区之外) package.json 看起来像这样:
peerDependencies: {
backbone.marionette: ">= 1 < 3"
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,即使项目 B 不依赖于项目 A,当@organization/UILibrary 被拉入项目 B 时,它会根据它的需要获得 2.4.1 版的主干.marionette(而项目 B 的本地要求是 1.8.8)。
我尝试使用分辨率将项目 B package.json 更新为:
dependencies: {
backbone.marionette: '1.8.8',
@organization/UILibrary: '0.0.22'
},
{
"resolutions": {
"@organization/**/backbone.marionette": "1.8.8",
"@organization/backbone.marionette": "1.8.8",
"@organization/UILibrary/backbone.marionette: "1.8.8",
"@organization/UILibrary/**/backbone.marionette: '1.8.8"
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?基于对纱线问题及其一些选择性依赖 PR 的一些挖掘(参见https://github.com/yarnpkg/yarn/issues/4874),我相信这可能是由于 UILibrary 的作用域(有斜线) )。
package.json我在eg中配置了2个工作区example,但gatsby-theme后来我发现我实际上是在开发一个gatsby-starter,所以我删除了example依赖于后一个工作区的工作区package.json。
我想知道如果我将所有文件从gatsby-theme/项目根目录移动并package.json用 ' 覆盖 和 其他文件gatsby-theme,它是否会成为一个可以用npm和管理的项目yarn?
Yarn install 生成一个 yarn.lock 文件,该文件从npmjs获取包。
我在yarn.lock中看到一个包的3个不同版本,例如:
angular@1.6:
version "1.6.10"
resolved "https://registry.yarnpkg.com/angular/-/angular-1.6.10.tgz#eed3080a34d29d0f681ff119b18ce294e3f74826"
integrity sha512-PCZ5/hVdvPQiYyH0VwsPjrErPHRcITnaXxhksceOXgtJeesKHLA7KDu4X/yvcAi+1zdGgGF+9pDxkJvghXI9Wg==
angular@>=1.4.0, angular@^1.0.8:
version "1.7.7"
resolved "https://registry.yarnpkg.com/angular/-/angular-1.7.7.tgz#26bd87693deadcbd5944610a7a0463fc79a18803"
integrity sha512-MH3JEGd8y/EkNCKJ8EV6Ch0j9X0rZTta/QVIDpBWaIdfh85/e5KO8+ZKgvWIb02MQuiS20pDFmMFlv4ZaLcLWg==
angular@~1.2.0:
version "1.2.32"
resolved "https://registry.yarnpkg.com/angular/-/angular-1.2.32.tgz#df52625a5167919931418dda3a9208b9f5fa3db4"
integrity sha1-31JiWlFnkZkxQY3aOpIIufX6PbQ=
Run Code Online (Sandbox Code Playgroud)
这是否意味着最终的捆绑包包含所有捆绑包,否则webpack如何知道要选择哪个版本?社区中解决该问题的最佳实践是什么?我知道--flat选项,但是有成千上万个软件包,我需要一段时间才能为每个选择一个。
yarnpkg ×9
npm ×4
javascript ×2
npm-install ×2
docker ×1
node.js ×1
npm-scripts ×1
nvm ×1
package.json ×1
subdirectory ×1
webpack ×1