Make the SDK friendly to locally link and develop on

Fix https://github.com/vector-im/hydrogen-web/issues/686
Fix https://github.com/vector-im/hydrogen-web/issues/682

Instead of deleting the whole `target/` directory, leave it alone so the symlink
driving the `npm link`/`yarn link` stays in tact.

Leave Vite builds in their build directories (`/lib-build`/`/asset-build`)
so you can `vite build --watch` to build on local changes and still have a
consisent place to reference in the `package.json` `exports`. Previously,
everything relied on `build.sh` which does a bunch of moving and renaming
and made it hard to rebuild on changes.

Add back support for CommonJS (adding the `package.json` `exports`).

The last piece is making sure the `?url` imports (`import workerPath from 'hydrogen-view-sdk/main.js?url';`)
work still. It looks like this may have just been solved via
https://github.com/vitejs/vite/issues/6725 -> https://github.com/vitejs/vite/pull/7073
(literally 2 days ago) and we just need to wait for the next Vite release 🎉
This commit is contained in:
Eric Eastwood 2022-02-26 01:12:00 -06:00
parent 460780d602
commit cd007b40e1
4 changed files with 35 additions and 25 deletions

View File

@ -2,6 +2,17 @@
"name": "hydrogen-view-sdk", "name": "hydrogen-view-sdk",
"description": "Embeddable matrix client library, including view components", "description": "Embeddable matrix client library, including view components",
"version": "0.0.5", "version": "0.0.5",
"main": "./hydrogen.es.js", "main": "./hydrogen.cjs.js",
"exports": {
".": {
"import": "./lib-build/hydrogen.es.js",
"require": "./lib-build/hydrogen.cjs.js"
},
"./paths/vite": "./paths/vite.js",
"./style.css": "./asset-build/assets/index.css",
"./main.js": "./asset-build/assets/download-sandbox.html",
"./download-sandbox.html": "./asset-build/assets/download-sandbox.html",
"./assets/*": "./asset-build/assets/*"
},
"type": "module" "type": "module"
} }

View File

@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
rm -rf target rm -rf target/*
yarn run vite build -c vite.sdk-assets-config.js yarn run vite build -c vite.sdk-assets-config.js
yarn run vite build -c vite.sdk-lib-config.js yarn run vite build -c vite.sdk-lib-config.js
yarn tsc -p tsconfig-declaration.json yarn tsc -p tsconfig-declaration.json
@ -10,13 +10,7 @@ mkdir target/paths
cp doc/SDK.md target/README.md cp doc/SDK.md target/README.md
pushd target pushd target
pushd asset-build/assets pushd asset-build/assets
mv main.*.js ../../main.js rm !(main).js *.wasm
mv index.*.css ../../style.css
mv download-sandbox.*.html ../../download-sandbox.html
rm *.js *.wasm
mv ./* ../../
popd popd
rm -rf asset-build rm index.html
mv lib-build/* .
rm -rf lib-build
popd popd

View File

@ -3,21 +3,7 @@ const fs = require("fs");
const appManifest = require("../../package.json"); const appManifest = require("../../package.json");
const baseSDKManifest = require("./base-manifest.json"); const baseSDKManifest = require("./base-manifest.json");
/* /*
need to leave exports out of base-manifest.json because of #vite-bug, Need to leave typescript type definitions out until the
with the downside that we can't support environments that support
both esm and commonjs modules, so we pick just esm.
```
"exports": {
".": {
"import": "./hydrogen.es.js",
"require": "./hydrogen.cjs.js"
},
"./paths/vite": "./paths/vite.js",
"./style.css": "./style.css"
},
```
Also need to leave typescript type definitions out until the
typescript conversion is complete and all imports in the d.ts files typescript conversion is complete and all imports in the d.ts files
exists. exists.
``` ```

View File

@ -2,10 +2,29 @@ const path = require("path");
const mergeOptions = require('merge-options'); const mergeOptions = require('merge-options');
const commonOptions = require("./vite.common-config.js"); const commonOptions = require("./vite.common-config.js");
const pathsToExport = [
"index.js",
"index.css",
"download-sandbox.html"
];
export default mergeOptions(commonOptions, { export default mergeOptions(commonOptions, {
root: "src/", root: "src/",
base: "./", base: "./",
build: { build: {
outDir: "../target/asset-build/", outDir: "../target/asset-build/",
rollupOptions: {
output: {
assetFileNames: (chunkInfo) => {
// Get rid of the hash so we can consistently reference these
// files in our `package.json` `exports`
if(pathsToExport.includes(path.basename(chunkInfo.name))) {
return "assets/[name].[ext]";
}
return "assets/[name]-[hash][extname]";
}
}
}
}, },
}); });