Product
Socket Now Supports uv.lock Files
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
@yarnpkg/doctor
Advanced tools
A cli tool to help package maintainers support pnp.
To check your package run:
yarn dlx @yarnpkg/doctor ./package-dir
You'll get a pretty output with all the warnings.
This rule warns when imported dependencies are not listed in a project/workspace's package.json.
Node allows you to import any package without having a version specified in your package.json. This can lead to subtle and hard to solve bugs.
For example:
Node might find a globally installed package and the project works on your machine. While other your colleagues might be missing the globally installed package or (worse) have an incompatible version installed.
Or Node might find a transitive dependency (dependency of a dependency) and use that. If you remove or upgrade that dependency and it affects the transitive dependency then it can trigger all sorts of bugs.
By making sure all dependencies are listed in the package.json pnp can make your project less brittle.
This rule warns when a package has unmet peer dependencies.
Peer dependencies are useful for allowing package authors to delegate control of a dependency's version to the package user. When used correctly they prevent version conflicts and reduce bundle sizes.
Peer dependencies must be manually added to the package user's package.json. Because they responsibility of the package user they can be overlooked.
This rule ensures that all peer dependencies are included and therefore installed for your project.
This rule warns when node_modules
appears in strings or template literals.
If a string literal includes "node_modules" else it is likely a sign that the package is doing shady things with node_modules which would likely fail under PnP.
One of the big benefits of Plug-n-Play is that it does away with node_modules
directories to achieve zero installs, increased stability and reliability. Therefore, resolutions that rely on the presence of a node_modules
folder will fail.
Aside from satisfying Plug'n'Play requirements, resolving packages using node_modules
this way is brittle and may result unpredictable packages versions and subtle bugs.
Examples of incorrect code for this rule:
var module = require("../node_modules/lodash");
Examples of correct code for this rule:
var foo = require("lodash"); // importing a module by its name
This rule disallows referencing loaders or plugins in string literals in a webpack.config.js
in a non-private package.
Ensures that third party tools (CRA, Next, Vue-cli, etc) resolve their own versions of loaders and presets.
When loaders and plugins are included as strings e.g loader: 'file-loader'
in a webpack.config.js
then Webpack will try to resolve it from the point of view of the project root.
If the webpack config is located in a dependency, as with tools such as Create-React-App, Next.js and Gatsby, then Webpack might accidentally use an different hoisted version of a plugin. This can cause various weird bugs and crashes.
The third party tool should use require.resolve('file-loader')
so that Webpack loads the plugin through an absolute path and it will use the loader/plugin it specifies in its own package.json.
Examples of incorrect code for this rule:
const webpackConfig = {
use: `ts-loader`,
};
Examples of correct code for this rule:
const webpackConfig = {
use: require.resolve(`ts-loader`),
};
This rule is a temporary measure to address this issue
2.1.0
yarn set version 2.1.0
"preferUnplugged": true
field in the manifest. This will hurt the experience of your users (your project will be the only one that will require hard installs), so please refrain using this field unless there's no other choice.yarn search
will open a rich interface to search for packages to install (requires the interactive-tools
plugin).yarn npm logout
will remove your credentials from your home directory.yarn plugin import from sources
will allow you to build plugins from the master branch of the our repository.yarn workspaces focus
will only install the current workspace, plus any other workspace it might depend on. The --production
flag will only install their production dependencies.yarn exec
will execute the specified command at the root of the current workspace (reintroduced from the Classic branch).yarn create
is now an alias to yarn dlx
(with the create-
prefix.)yarn init
will now generate an EditorConfig file, and run git init
on the resulting folder.yarn init
now supports a -i
flag which will automatically pin the Yarn version in the project.yarn init
will now inject the settings from the initFields
configuration setting when generating the initial manifest (future release will remove the now deprecated initVersion
and initLicense
settings).yarn init
will now initialize a workspace project if given the -w
flag.yarn workspaces foreach
now support glob patterns in --include
and --exclude
.yarn set version
now as an alias called yarn policies set-version
(will be deprecated in 3.x).yarn run
now supports the --inspect
and --inspect-brk
switches for binaries (for example yarn run --inspect-brk jest
).yarn remove
and yarn up
now support glob patterns.yarn dlx
now respects the local project configuration (particularly the configured registries). This is still experimental and will be further improved in the next months.yarn dlx
now properly exits with an exit code when the underlying command returned an exit code too.yarn config get
(and set
) can now access nested configuration values (for example, yarn config get npmScopes.foo.npmRegistryServer
will tell you which server is configured for the given server, if any).yarn config get
will now hide its secrets (or rather yours) from the rest of the world. A new --no-redacted
option will toggle off this behavior if needed.yarn config set
now has a --json
option that will let Yarn know it should interpret the given value as a JSON object (useful to set server configuration, etc).yarn workspace foreach
will now exit with the expected status code if there's an error.${name}
syntax (strict by default; use ${name:-default}
to provide a default value).changesetIgnorePatterns
setting can be used to ignore some paths from the changeset detection from yarn version check
(changes to those paths won't be taken into account when deciding which workspaces need to fresh releases).changesetBaseRef
setting can be used to change the name of the master branch that yarn version check
will use in its changeset heuristic.httpTimeout
and httpRetry
settings allow you to configure the behavior of the HTTP(s) requests.preferTruncatedLines
setting allow you to tell Yarn that it's ok if info and warning messages are truncated to fit in a single line (errors will always wrap as much as needed, and piping Yarn's output will toggle off this behaviour altogether).compressionLevel
. If you don't use Zero-Installs, using a value of 0
may yield speed improvements at little cost.owner/repo#workspace=name
syntax (which you can mix with branch names as usual).core.autocrlf
so that the builds lead to deterministic results. Generally speaking, improvements have been made to avoid freshly built packages from generating different results.npm pack
if we detect a package-lock.json
).exec:
protocol has a different API. In particular, builtin modules can now be accessed without having to actually require them.**/*
in your workspaces
field will now detect all child packages as workspaces.pnpMode: loose
setting). Under this mode, Yarn will compute the list of packages that would have been hoisted under the node_modules linker, and let the application code access them with only a warning. This mode will however not become the default - warnings cannot be caught by the application code, and as a result the output of the loose mode can be quite verbose, often being more confusing than the strict mode.yarn upgrade-interactive
has been revamped to reintroduce some elements that had been omitted when porting the command from the v1 to the v2.lutimes
support into Node itself, since it was otherwise impossible to implement perfect copy mechanisms (the copied symlinks would end up with different mtime than their originals)..vscode/pnpify
to .yarn/sdks
.echo {foo,bar}
won't work expect if there's actually a file named foo
and/or bar
..cjs
extension has been added to multiple files in order to make it easier to use "type": "module"
.FAQs
Unknown package
The npm package @yarnpkg/doctor receives a total of 3,039 weekly downloads. As such, @yarnpkg/doctor popularity was classified as popular.
We found that @yarnpkg/doctor demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
Research
Security News
Socket researchers have discovered multiple malicious npm packages targeting Solana private keys, abusing Gmail to exfiltrate the data and drain Solana wallets.
Security News
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.