Sanity: Build fails due to module resolution when using yarn workspaces

Created on 6 Aug 2020  路  5Comments  路  Source: sanity-io/sanity

If you find a security vulnerability, do NOT open an issue. Email [email protected] instead.

Describe the bug

Building sanity seems to fail when some dependencies are not hoisted to the top-level node_modules directory.
When using yarn workspaces, packages may not necessarily be hoisted all the time. In my monorepo, some of the "slate" packages lied inside /node_modules/@sanity/form-builder/node_modules instead.


When building using sanity build I then got the following error:

Error: Errors while building:
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-plain-serializer/lib/slate-plain-serializer.es.js
Module not found: Error: Can't resolve 'slate' in '/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-plain-serializer/lib'
resolve 'slate' in '/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-plain-serializer/lib'
Parsed request is a module
using description file: /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-plain-serializer/package.json (relative path: ./lib)
Field 'browser' doesn't contain a valid alias configuration
after using description file: /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-plain-serializer/package.json (relative path: ./lib)
resolve as module
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-plain-serializer/lib/node_modules doesn't exist or is not a directory
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-plain-serializer/node_modules doesn't exist or is not a directory
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/node_modules doesn't exist or is not a directory
/Users/mikael/git/node_modules doesn't exist or is not a directory
/Users/mikael/git/node_modules doesn't exist or is not a directory
/Users/mikael/node_modules doesn't exist or is not a directory
/Users/node_modules doesn't exist or is not a directory
/node_modules doesn't exist or is not a directory
looking for modules in /Users/mikael/git/yarn_unfocused_issue_repro/node_modules
using description file: /Users/mikael/git/yarn_unfocused_issue_repro/package.json (relative path: ./node_modules)
Field 'browser' doesn't contain a valid alias configuration
after using description file: /Users/mikael/git/yarn_unfocused_issue_repro/package.json (relative path: ./node_modules)
using description file: /Users/mikael/git/yarn_unfocused_issue_repro/package.json (relative path: ./node_modules/slate)
no extension
Field 'browser' doesn't contain a valid alias configuration
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate doesn't exist
.js
Field 'browser' doesn't contain a valid alias configuration
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.js doesn't exist
.jsx
Field 'browser' doesn't contain a valid alias configuration
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.jsx doesn't exist
.es6
Field 'browser' doesn't contain a valid alias configuration
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.es6 doesn't exist
.es
Field 'browser' doesn't contain a valid alias configuration
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.es doesn't exist
.mjs
Field 'browser' doesn't contain a valid alias configuration
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.mjs doesn't exist
.ts
Field 'browser' doesn't contain a valid alias configuration
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.ts doesn't exist
.tsx
Field 'browser' doesn't contain a valid alias configuration
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.tsx doesn't exist
as directory
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate doesn't exist
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-plain-serializer/lib/node_modules]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-plain-serializer/node_modules]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/node_modules]
[/Users/mikael/git/node_modules]
[/Users/mikael/git/node_modules]
[/Users/mikael/node_modules]
[/Users/node_modules]
[/node_modules]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.js]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.jsx]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.es6]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.es]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.mjs]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.ts]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.tsx]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate]
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-plain-serializer/lib/slate-plain-serializer.es.js 1:0-49
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/form-builder/node_modules/slate-react/lib/slate-react.es.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/form-builder/lib/inputs/BlockEditor/EditNode.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/form-builder/lib/inputs/BlockEditor/BlockEditor.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/form-builder/lib/inputs/BlockEditor/Input.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/form-builder/lib/inputs/BlockEditor/SyncWrapper.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/form-builder/lib/inputs/BlockEditor/index.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/form-builder/lib/sanity?sanityPart=part%3A%40sanity%2Fform-builder
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/components/BrokenReferences.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/utils/withInitialValue.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/panes/documentPane/DocumentPaneProvider.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/panes/documentPane/index.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/panes/DeskToolPane.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/panes/index.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/tool/DeskToolPanes.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/tool/DeskTool.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/tool/index.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/tool?sanityPart=all%3Apart%3A%40sanity%2Fbase%2Ftool
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/default-layout/lib/defaultLayoutRouter.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/default-layout/lib/components/DefaultLayoutContainer.js?sanityPart=part%3A%40sanity%2Fbase%2Froot
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/base/lib/components/SanityRoot.js?sanityPart=part%3A%40sanity%2Fbase%2Fsanity-root
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/server/lib/browser/entry.js
@ multi /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/normalize.css/normalize.css /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/server/lib/browser/entry.js
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-prop-types/lib/slate-prop-types.es.js
Module not found: Error: Can't resolve 'slate' in '/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-prop-types/lib'
resolve 'slate' in '/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-prop-types/lib'
Parsed request is a module
using description file: /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-prop-types/package.json (relative path: ./lib)
Field 'browser' doesn't contain a valid alias configuration
after using description file: /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-prop-types/package.json (relative path: ./lib)
resolve as module
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-prop-types/lib/node_modules doesn't exist or is not a directory
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-prop-types/node_modules doesn't exist or is not a directory
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/node_modules doesn't exist or is not a directory
/Users/mikael/git/node_modules doesn't exist or is not a directory
/Users/mikael/git/node_modules doesn't exist or is not a directory
/Users/mikael/node_modules doesn't exist or is not a directory
/Users/node_modules doesn't exist or is not a directory
/node_modules doesn't exist or is not a directory
looking for modules in /Users/mikael/git/yarn_unfocused_issue_repro/node_modules
using description file: /Users/mikael/git/yarn_unfocused_issue_repro/package.json (relative path: ./node_modules)
Field 'browser' doesn't contain a valid alias configuration
after using description file: /Users/mikael/git/yarn_unfocused_issue_repro/package.json (relative path: ./node_modules)
using description file: /Users/mikael/git/yarn_unfocused_issue_repro/package.json (relative path: ./node_modules/slate)
no extension
Field 'browser' doesn't contain a valid alias configuration
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate doesn't exist
.js
Field 'browser' doesn't contain a valid alias configuration
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.js doesn't exist
.jsx
Field 'browser' doesn't contain a valid alias configuration
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.jsx doesn't exist
.es6
Field 'browser' doesn't contain a valid alias configuration
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.es6 doesn't exist
.es
Field 'browser' doesn't contain a valid alias configuration
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.es doesn't exist
.mjs
Field 'browser' doesn't contain a valid alias configuration
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.mjs doesn't exist
.ts
Field 'browser' doesn't contain a valid alias configuration
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.ts doesn't exist
.tsx
Field 'browser' doesn't contain a valid alias configuration
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.tsx doesn't exist
as directory
/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate doesn't exist
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-prop-types/lib/node_modules]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-prop-types/node_modules]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/node_modules]
[/Users/mikael/git/node_modules]
[/Users/mikael/git/node_modules]
[/Users/mikael/node_modules]
[/Users/node_modules]
[/node_modules]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.js]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.jsx]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.es6]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.es]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.mjs]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.ts]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate.tsx]
[/Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate]
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/slate-prop-types/lib/slate-prop-types.es.js 1:0-111
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/form-builder/node_modules/slate-react/lib/slate-react.es.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/form-builder/lib/inputs/BlockEditor/EditNode.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/form-builder/lib/inputs/BlockEditor/BlockEditor.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/form-builder/lib/inputs/BlockEditor/Input.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/form-builder/lib/inputs/BlockEditor/SyncWrapper.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/form-builder/lib/inputs/BlockEditor/index.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/form-builder/lib/sanity?sanityPart=part%3A%40sanity%2Fform-builder
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/components/BrokenReferences.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/utils/withInitialValue.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/panes/documentPane/DocumentPaneProvider.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/panes/documentPane/index.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/panes/DeskToolPane.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/panes/index.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/tool/DeskToolPanes.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/tool/DeskTool.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/tool/index.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/desk-tool/lib/tool?sanityPart=all%3Apart%3A%40sanity%2Fbase%2Ftool
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/default-layout/lib/defaultLayoutRouter.js
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/default-layout/lib/components/DefaultLayoutContainer.js?sanityPart=part%3A%40sanity%2Fbase%2Froot
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/base/lib/components/SanityRoot.js?sanityPart=part%3A%40sanity%2Fbase%2Fsanity-root
@ /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/server/lib/browser/entry.js
@ multi /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/normalize.css/normalize.css /Users/mikael/git/yarn_unfocused_issue_repro/node_modules/@sanity/server/lib/browser/entry.js
at ~/git/yarn_unfocused_issue_repro/node_modules/@sanity/core/lib/actions/build/buildStaticAssets.js:129:15
at Generator.next ()
at asyncGeneratorStep (~/git/yarn_unfocused_issue_repro/node_modules/@sanity/core/lib/actions/build/buildStaticAssets.js:40:103)
at _next (~/git/yarn_unfocused_issue_repro/node_modules/@sanity/core/lib/actions/build/buildStaticAssets.js:42:194)

To Reproduce

Steps to reproduce the behavior:

I've created a reproduction repository here https://github.com/mikaelkolkinn/yarn_unfocused_issue_repro
It contains four workspaces/packages, where the one that fails is called "sanity-studio".

# initial install
yarn

# build fails
yarn reproduce

Expected behavior

Build succeeds

Which versions of Sanity are you using?

@sanity/cli 1.149.19 (latest: unknown)
@sanity/base 1.149.19 (latest: unknown)
@sanity/cli 1.149.19 (latest: unknown)
@sanity/components 1.149.19 (latest: unknown)
@sanity/core 1.149.19 (latest: unknown)
@sanity/default-layout 1.149.19 (latest: unknown)
@sanity/default-login 1.149.18 (latest: unknown)
@sanity/desk-tool 1.149.19 (latest: unknown)
@sanity/vision 1.149.16 (latest: unknown)

What operating system are you using?

OS X

Which versions of Node.js / npm are you running?

Node version: v14.4.0
Yarn version: 2.1.1

Additional context

I got help pin-pointing the problem from yarnpkg/berry#1677.
Also got a workaround from there, but it would be best if the issue could be resolved properly.

All 5 comments

Hi and thank you for reporting! Can you try upgrading your studio and see if the issue still persists?

Hi @vicbergquist, ugrading Sanity Studio seems to have solved the issue.
Thanks.

hi @mikaelkolkinn I'm just a bit curious, if you're using yarn2, why do you still have a node_modules directory? :thinking:
I've tried yesterday to switch some existing sanity app to yarn2 but didn't succeed because it seems that sanity cli try to locate @sanity/base and fails.

Hi @shouze. We had some difficulty getting other parts of our monorepo working without node_modules, which is why we had nodeLinker: node-modules set in .yarnrc.yml.

Indeed works pretty well now :ok_hand:

Was this page helpful?
0 / 5 - 0 ratings