Open davidisaaclee opened 1 year ago
https://github.com/matrix-org/matrix-js-sdk/pull/3051 fixes the package.json#browser
entry point, but does not address prepublishOnly
not running for git dependencies.
Actually, I think #3051 does not fix my use case – after pulling those changes into my fork and trying to use it as a git dependency, I get the same errors as I mentioned in the original issue description. Reverting to the solution I suggested above still works for use as git dependency.
Installing
matrix-js-sdk
as a git dependency (e.g. for a fork of the repo) in certain browser dev environments – likecreate-react-app
– breaks builds. (I don't think this issue is limited tocreate-react-app
, but that is what I'm using.)Repro I can create a repo for this if it's helpful, but I'd prefer not to keep one around on my Github account.
yarn create react-app matrix-js-sdk-git-dep-bug --template typescript
yarn add matrix-js-sdk@matrix-org/matrix-js-sdk
yarn start
Project should build, but it has the following errors: https://gist.github.com/davidisaaclee/65a6d1a93b594b4d5e29fa3f352125a2
I think these are the causes:
matrix-js-sdk
'spackage.json#browser
is set to./lib/browser-index.ts
, which afaict is not actually created byyarn build
(it appears to be an intermediate artifact ofyarn build:compile-web
); so when looking for abrowser
entrypoint, one is not found (and somain
is likely used, which causes (1) errors sincesrc/index.ts
requires transpilation but is not being transpiled, and (2) the kinds of errors thatbrowser-index
was created to solve, like undeclared global fields).matrix-js-sdk
uses theprepublishOnly
hook to transpile and emit type declarations. This hook is not called for dependencies specified using git URLs (https://github.com/npm/npm/issues/3055); so installing via git URL dependency never creates these necessary files.I've solved these problems for my use case by doing the following (links to actual code changes included):
Update: Fixed in https://github.com/matrix-org/matrix-js-sdk/pull/3051Not fixed, see my comment below. Setpackage.json#browser
to./lib/browser-index.js
, and add apackage.json#types
field pointing to./lib/browser-index.d.ts
. https://github.com/matrix-org/matrix-js-sdk/commit/5f9cb34a8307b64eba6d4ad5d31da855b2dd4875 https://github.com/matrix-org/matrix-js-sdk/commit/ef4f9f13c2f710dfe0ec660b4be7b2c7f1263782./dist/browser-matrix.js
asbrowser
, but with that,matrix-js-sdk
's module at runtime was empty (i.e.import * as matrix from 'matrix-js-sdk'
yieldedObject.keys(matrix).length === 0
; same for default import)./src/browser-index.ts
(by way ofmatrix_src_browser
), and passesmatrix-js-sdk
through Babel using its Webpack config. This isn't worth the extra configuration for my use case (especially difficult for create-react-app!); and I think the majority of people will not want to special-casematrix-js-sdk
in their configs.package.json#types
does not have a way to export browser/Node-specific typings (a lamain
/browser
). I am not using my fork in any Node projects, so this isn't an issue for me. I'm not sure if this would cause an issue for Node projects.prepack
is a good approach. I'll address it if this issue gets any kind of traction. Change theprepublishOnly
script to run instead atprepack
(i.e. deleteprepublishOnly
hook inpackage.json
, add"prepack": "yarn build"
) https://github.com/matrix-org/matrix-js-sdk/commit/972f256eb7b7343c13f66ec124e8a54d8b699260prepare
is another lifecycle hook that people use for this, but is not supported by Yarn, which I am usingprepack
will run. It definitely runs when installing all dependencies inmatrix-js-sdk
(e.g. by callingyarn
in the mjs project dir); that stinks, since this is unnecessary andyarn build
can take some time.I'd be happy to turn the commits above into one or two PRs, but I thought I'd write this issue first in case there are gotchas or alternatives I'm missing. (For example, I see that some of the mentioned
package.json
fields are being manipulated byrelease.sh
.)Thanks for the useful SDK!