在一个更大的打字稿项目上工作,我们决定将代码移动到带有纱线工作空间的monorepo .
我们使用webpack来构建和捆绑,一切运行良好(特别是本地模块/包之间的链接).
由于纱线工作区将大多数node_modules存储在mono repo的根文件夹中,因此IDE(IntelliJ以及VSCode)在"内部"项目(所谓的"monorepo"的"包")内编码时解决了对任何node_modules的导入问题. ).
奇怪的是,导入是未知的,但另一方面,如果您手动将其导入,则大多数情况下您可以在IDE中导航到相同导入的IDE中的正确源/定义.
我们试图告诉IntelliJ查看node_modules的另一个文件夹,但仍然不满意.
请分享您对纱线工作空间/ monorepo(例如lerna)的体验以及您如何开发生活在这些单体中的代码.
你使用哪个IDE?
您是否在IDE和/或package.json,tsconfig.json中添加了任何特殊配置?
我有 nvm:
nvm ls
v8.11.3
v8.11.4
-> v11.1.0
default -> 8.11.4 (-> v8.11.4)
node -> stable (-> v11.1.0) (default)
stable -> 11.1 (-> v11.1.0) (default)
Run Code Online (Sandbox Code Playgroud)
我安装了纱线:
sudo apt-get install --no-install-recommends yarn
Run Code Online (Sandbox Code Playgroud)
我还添加了 .bashrc alias node=nodejs。但是当我尝试时,yarn install我看到:
Yarn requires Node.js 4.0 or higher to be installed.
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
我有一个Rails项目,我们从Rails 5.0转换为Rails 5.1.0.当我尝试预编译资产时,我收到以下错误消息:
Yarn executable was not detected in the system.
Download Yarn at https://yarnpkg.com/en/docs/install
Run Code Online (Sandbox Code Playgroud)
我从互联网搜索中读到的一切都说纱线和网络包装器附带Rails 5.1.我从检查rails版本中得到以下内容.
$rails --version
Rails 5.1.0
Run Code Online (Sandbox Code Playgroud)
我该如何解决?我也想知道发生了什么.
上下文
纱线工作区提供方便的单一回购功能,其中包自动链接.即,他们可以相互要求/导入,并且他们的二进制文件可以从工作区根目录链接和访问.
一个例子:
工作区/的package.json
{
"name": "200180719-yarn-bin",
"version": "1.0.0",
"workspaces": [
"packages/*"
],
"private": true
}
Run Code Online (Sandbox Code Playgroud)
工作区/包/ A /的package.json
{
"name": "a",
"version": "1.0.0",
"main": "src/index.js",
"bin": {
"mycli": "src/index.js"
}
}
Run Code Online (Sandbox Code Playgroud)
工作区/包/ A/src目录/ index.js
#!/usr/bin/env node
console.log('welcome to the cli')
Run Code Online (Sandbox Code Playgroud)
如果然后将目录更改为主工作区并运行yarn install,则yarn正确链接二进制文件,您可以运行:
yarn run mycli
Run Code Online (Sandbox Code Playgroud)
从工作区目录就好了.大!
问题
我yarn install遇到的问题是,如果你的代码首先必须编译,那么二进制文件在完成之前将不可用(因为你不应该在版本控制中提供已编译的代码).我使用Typescript来编译我的cli:
重命名index.js到index.ts并更新a/package.json到:
{
"name": "a",
"version": "1.0.0",
"main": "src/index.js",
"bin": {
"mycli": "dist/index.js"
},
"scripts": {
"build": "tsc src/index.ts --outDir dist", …Run Code Online (Sandbox Code Playgroud) 上下文
纱线工作空间提供了一种依赖单声道包装的便捷方式.当包A依赖于包B时,包B中定义的接口等在包A中被适当地解析.
问题
我面临的问题是,如果包B依赖于外部库,但外部库缺少打字,因此包B创建了自己的some-library.d.ts文件.当使用tslintlint包A时,对于包B中的表达式,此自定义定义文件已正确解析,但对于包A中与包B中的类型一起使用的表达式则无法解析.
我在这里推出了一个简单的例子:
https://github.com/tommedema/tslint-yarn-workspaces
它的核心如下.
包/ A/src目录/ index.ts
// tslint:disable:no-console
import { someDependedFn } from 'b'
export const someDependingFn = (): void => {
const someNr = someDependedFn('pascal-case-me')
console.log(someNr)
}
Run Code Online (Sandbox Code Playgroud)
包/ B/src目录/ index.ts
import camelCase from 'camelcase'
export const someDependedFn = (str: string): string => {
const camelStr = camelCase(str, { pascalCase: true })
return camelStr
}
Run Code Online (Sandbox Code Playgroud)
包/ B/src目录/分型/驼峰/ index.d.ts
// Type definitions for camelcase 5.0
// Project: https://github.com/sindresorhus/camelcase
// tslint:disable only-arrow-functions …Run Code Online (Sandbox Code Playgroud) 我正在使用Yarn处理软件包。
yarn install不管我使用哪个软件包,都会显示错误,但安装看起来已成功完成,并且文件node-modules直接位于下面。(jquery-ui不出现在下方node-modules)
我删除yarn.lock并再次尝试,但徒劳无功。
有人可以帮忙吗?
我的环境如下所示:
whitebear$ yarn -v
1.10.1
whitebear$ node -v
v11.0.0
whitebear$ npm -v
6.4.1
Run Code Online (Sandbox Code Playgroud)
package.json
{
"devDependencies": {
"@symfony/webpack-encore": "^0.20.0",
"bootstrap": "^4.1.3",
"jquery": "^3.3.1",
"node-sass": "^4.9.4",
"popper.js": "^1.14.4",
"sass-loader": "^7.1.0",
"webpack-notifier": "^1.6.0"
},
"license": "UNLICENSED",
"private": true,
"scripts": {
"dev-server": "encore dev-server",
"dev": "encore dev",
"watch": "encore dev --watch",
"build": "encore production"
},
"dependencies": {
"encore": "^0.0.30-beta",
"jquery-ui": "^1.12.1",
"jquery.event.drag": "^2.2.2",
"slickgrid-es6": "^3.0.1"
}
}
Run Code Online (Sandbox Code Playgroud)
纱线原木 install …
如果我调用yarn add <my-package>,Yarn将安装依赖项和devDependencies <my-package>.这是正常的行为吗?
我检查了文档,但我找不到阻止它安装开发依赖项(我不需要)的方法.我相信devDependencies是用于将源代码编译到构建脚本中的依赖项.构建我的应用程序我只需要构建.
当我尝试使用"运行"(shift+ f10)启动它时,我的RoR项目出错了
但是当我rails s在控制台中启动服务器时,它可以工作.
========================================
Your Yarn packages are out of date!
Please run `yarn install` to update.
========================================
To disable this check, please add `config.webpacker.check_yarn_integrity = false`
to your Rails development config file (config/environments/development.rb).
yarn check v1.6.0
warning Integrity check: System parameters don't match
error Integrity check failed
error Found 1 errors.
info Visit https://yarnpkg.com/en/docs/cli/check for documentation about this command.
Run Code Online (Sandbox Code Playgroud)
# Gemfile.lock
GEM
remote: https://rubygems.org/
specs:
actioncable (5.2.0)
actionpack (= 5.2.0)
nio4r (~> 2.0) …Run Code Online (Sandbox Code Playgroud) 因此,到目前为止,似乎还没有yarn audit --fix,所以我正在尝试找出解决yarn audit错误的方法。
我试过了一个yarn upgrade,它修复了一些错误(很棒),但是仍然有几个错误。
然后,我尝试了yarn add <package>@latest其余的高漏洞,但是package.json当我认为问题出在我所使用软件包的依赖项上时,它升级了我的版本。
这是我一些剩余错误的示例:
????????????????????????????????????????????????????????????????????????????????
? high ? Regular Expression Denial of Service ?
????????????????????????????????????????????????????????????????????????????????
? Package ? minimatch ?
????????????????????????????????????????????????????????????????????????????????
? Patched in ? >=3.0.2 ?
????????????????????????????????????????????????????????????????????????????????
? Dependency of ? gulp ?
????????????????????????????????????????????????????????????????????????????????
? Path ? gulp > vinyl-fs > glob-stream > glob > minimatch ?
????????????????????????????????????????????????????????????????????????????????
? More info ? https://nodesecurity.io/advisories/118 ?
????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????
? high ? Regular Expression Denial of …Run Code Online (Sandbox Code Playgroud) 我有一个相当大的项目 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 …