如果我调用yarn add <my-package>,Yarn将安装依赖项和devDependencies <my-package>.这是正常的行为吗?
我检查了文档,但我找不到阻止它安装开发依赖项(我不需要)的方法.我相信devDependencies是用于将源代码编译到构建脚本中的依赖项.构建我的应用程序我只需要构建.
我有一个相当大的项目 A 使用 Node 和 Typescript。在项目 AI 中有很多不同的模块,我想在另一个项目 B 中重用它们。
因此我用这个 tsconfig.json 构建了项目 A:
{
"compilerOptions": {
"target": "es2017",
"module": "commonjs",
"declaration": true,
"outDir": "./dist",
"sourceMap": true,
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"typeRoots": ["./node_modules/@types", "./modules/@types"]
},
"exclude": ["node_modules"]
}
Run Code Online (Sandbox Code Playgroud)
因此所有文件都以这种方式构建到 /dist 文件夹中:
要在另一个项目中使用这些 moduleA 和 moduleB,我将以下内容添加到项目 A 中的 package.json 中:
"name": "projectA",
"version": "1.0.0",
"description": "...",
"main": "dist/moduleA.js",
"typings": "dist/moduleA.d.ts",
Run Code Online (Sandbox Code Playgroud)
我使用纱线工作区来访问项目 A 作为项目 B 中的包。但问题是,在import {ModuleA} from 'projectA'我的新项目 B …
我试图在安装任何软件包之前运行一些策略脚本.例如:
{
"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
并检查我尝试安装的任何软件包的版本.如果版本不可用,我计划在安装之前将其设置为交互式并询问用户的确认.
迁移到 React 16 后,我收到了很多警告,指出存在不正确的对等依赖关系。
如何使用纱线避免这些问题?
我尝试删除所有包,删除yarn.lock,然后再次添加yarn。
warning "react-textarea-autosize@4.3.2" has incorrect peer dependency "react@>=0.14.0 <16.0.0".
warning "react-modal@2.4.1" has incorrect peer dependency "react@^0.14.0 || ^15.0.0".
warning "react-modal@2.4.1" has incorrect peer dependency "react-dom@^0.14.0 || ^15.0.0".
warning "react-komposer@2.0.0" has incorrect peer dependency "react@^0.14.7 || ^15.0.0".
warning "react-treebeard@2.0.3" has incorrect peer dependency "react@^15.5.4".
warning "react-treebeard@2.0.3" has incorrect peer dependency "react-dom@^15.5.4".
warning "babel-loader@6.4.1" has unmet peer dependency "webpack@1 || 2 || ^2.1.0-beta || ^2.2.0-rc".
warning "chai-enzyme@0.8.0" has unmet peer dependency "cheerio@0.19.x || 0.20.x || 0.22.x || …Run Code Online (Sandbox Code Playgroud) 我有package.json和yarn.lock文件.yarn.lock有版本锁定,我想同步,并锁定(没有^)yarn.lock中的所有版本,回到package.json.有没有简单的方法呢?
最后我想在我的package.json中没有"^",因为它会导致太多麻烦,我想特别升级包装,而不是在我运行新纱线安装时不知不觉.
是否有任何工具或方法可以快速替换package.json中的版本与yarn.lock中存在的那些版本?
在我的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>
我设置了一个create-react-app,我试图在localhost上运行App.js,但是这样做后,yarn start我收到以下错误消息:
22:23 $ yarn start
yarn run v1.3.2
$ react-scripts start
Could not find a required file.
Name: index.html
Searched in: /Users/-----/Desktop/---/----/hw/HW-REPO/hw-name/public
error Command failed with exit code 1.
Run Code Online (Sandbox Code Playgroud)
我已经用安装了yarn yarn install,所以我不确定我的代码或文件结构是否有问题。
这是文件结构:
app-name
-client
--public
---index.html
---manifest.json
--src
---Components
----various folders
---App.js
---App.test.js
---index.js
-database
-model
-gitignore
-package-lock.json
-package.json
-server.js
-yarn.lock
Run Code Online (Sandbox Code Playgroud) 我试过用
brew install yarn@1.7.0 --without-node
Run Code Online (Sandbox Code Playgroud)
要么
brew install yarn@1.7.x --without-node
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误
Error: No available formula with the name "yarn@1.7.0"
==> Searching for a previously deleted formula (in the last month)...
Warning: homebrew/core is shallow clone. To get complete history run:
git -C "$(brew --repo homebrew/core)" fetch --unshallow
Error: No previously deleted formula found.
==> Searching for similarly named formulae...
Error: No similarly named formulae found.
==> Searching taps...
==> Searching taps on GitHub...
Error: No formulae found in taps.
Run Code Online (Sandbox Code Playgroud)
我认为可以使用brew安装不同版本的纱线吗?
我使用的库支持另一个具有广泛版本的库作为对等依赖项。不幸的是,工作区的子项目之一拉入了与使用库的子项目不同的版本。结果,它们最终需要不同的版本。
我正在尝试使用选择性分辨率来处理这个问题并强制它使用正确的版本(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 的作用域(有斜线) )。
yarnpkg ×10
npm ×6
node.js ×4
javascript ×2
npm-install ×2
reactjs ×2
homebrew ×1
npm-scripts ×1
package.json ×1
subdirectory ×1
tree ×1
typescript ×1