Fix studio-web build issues (#17)

* Add plugins for `wasm` and `top-level-await` to Vite config
* Avoid bundling dependencies
* Add external dependencies to project-level `package.json` manifests
This commit is contained in:
Danny McGee
2023-12-27 17:45:07 -05:00
committed by GitHub
parent 0a0acacfdb
commit e0cf0efc7a
9 changed files with 161 additions and 49 deletions
+4 -1
View File
@@ -1,7 +1,10 @@
{ {
"name": "@storyteller/framework", "name": "@storyteller/framework",
"version": "0.0.1", "version": "0.0.1",
"dependencies": {}, "dependencies": {
"@storyteller/utility": "0.0.1",
"lit": "^2.8.0"
},
"main": "./index.js", "main": "./index.js",
"module": "./index.mjs", "module": "./index.mjs",
"typings": "./index.d.ts" "typings": "./index.d.ts"
+4 -1
View File
@@ -35,7 +35,10 @@ export default defineConfig({
}, },
rollupOptions: { rollupOptions: {
// External packages that should not be bundled into your library. // External packages that should not be bundled into your library.
external: [], external: [
"@storyteller/utility",
"lit",
],
}, },
}, },
+3 -1
View File
@@ -2,7 +2,9 @@
"name": "@storyteller/source", "name": "@storyteller/source",
"version": "0.0.0", "version": "0.0.0",
"license": "MIT", "license": "MIT",
"scripts": {}, "scripts": {
"link-packages": "node ./scripts/link-packages.cjs"
},
"private": true, "private": true,
"devDependencies": { "devDependencies": {
"@nx/js": "16.9.1", "@nx/js": "16.9.1",
+89
View File
@@ -0,0 +1,89 @@
const cp = require("child_process");
const path = require("path");
const util = require("util");
let chalk;
const WS_ROOT = path.resolve(__dirname, "..");
async function main() {
chalk = (await import("chalk")).default;
try {
await run("npm", ["link"], { cwd: path.join(WS_ROOT, "dist/studio") });
await run("npm", ["link"], { cwd: path.join(WS_ROOT, "dist/utility") });
await run("npm", ["link", "@storyteller/utility"], { cwd: path.join(WS_ROOT, "dist/framework") });
await run("npm", ["link"], { cwd: path.join(WS_ROOT, "dist/framework") });
await run("npm", ["link", "@storyteller/studio", "@storyteller/framework"], {
cwd: path.join(WS_ROOT, "dist/studio-web")
});
await run("npm", ["link"], { cwd: path.join(WS_ROOT, "dist/studio-web") });
} catch (err) {
handleError(err);
}
}
/**
* @param {string} command
* @param {readonly string[]} args
* @param {import("node:child_process").SpawnOptions} options
*
* @returns {Promise<void>}
*/
async function run(command, args, options) {
options.shell = true;
const prompt = !!options.cwd && typeof options.cwd === "string" && options.cwd !== WS_ROOT
? `[${path.relative(WS_ROOT, options.cwd)}] >`
: `>`;
console.log(chalk.dim(`${prompt} ${command} ${args.join(" ")}`));
return new Promise((resolve, reject) => {
cp.spawn(command, args, options)
.on("exit", code => {
if (code) reject(code)
else resolve();
})
.on("close", code => {
if (code) reject(code)
else resolve();
})
.on("error", reject);
});
}
/**
* @param {any} err
* @returns {never}
*/
function handleError(err) {
if (typeof err === "number") {
console.log(`${
chalk.bold.redBright.inverse(" ERROR ")
} Child process exited with code ${err}`);
process.exit(err);
}
if (err != null && err instanceof Error) {
console.log(`${
chalk.bold.redBright.inverse(" ERROR ")
} ${err.message}`);
if (err.stack)
console.log(chalk.dim(err.stack));
process.exit(1);
}
console.log(`${
chalk.bold.redBright.inverse(" ERROR ")
} Child process threw an exception: ${util.inspect(err)}`);
process.exit(1);
}
main();
+6 -6
View File
@@ -1,12 +1,12 @@
{ {
"name": "@storyteller/studio-web", "name": "@storyteller/studio-web",
"version": "0.0.1", "version": "0.0.1",
"dependencies": {}, "dependencies": {
"@storyteller/framework": "0.0.1",
"@storyteller/studio": "0.0.1",
"lit": "^2.8.0"
},
"main": "./index.js", "main": "./index.js",
"module": "./index.mjs", "module": "./index.mjs",
"typings": "./index.d.ts", "typings": "./index.d.ts"
"exports": {
"./canvas-provider": "./canvas-provider.element.js",
"./viewer": "./viewer.element.js"
}
} }
+6
View File
@@ -7,6 +7,12 @@
"build": { "build": {
"executor": "@nx/vite:build", "executor": "@nx/vite:build",
"outputs": ["{options.outputPath}"], "outputs": ["{options.outputPath}"],
"dependsOn": [
{
"projects": ["studio"],
"target": "build:web"
}
],
"options": { "options": {
"outputPath": "dist/studio-web" "outputPath": "dist/studio-web"
} }
+1
View File
@@ -1 +1,2 @@
export * from "./lib/canvas-provider.element";
export * from "./lib/viewer.element"; export * from "./lib/viewer.element";
+47 -39
View File
@@ -1,50 +1,58 @@
/// <reference types='vitest' /> /// <reference types='vitest' />
import { nxViteTsPaths } from "@nx/vite/plugins/nx-tsconfig-paths.plugin";
import { defineConfig } from "vite"; import { defineConfig } from "vite";
import dts from "vite-plugin-dts"; import dts from "vite-plugin-dts";
import wasm from "vite-plugin-wasm";
import topLevelAwait from "vite-plugin-top-level-await";
import * as path from "path"; import * as path from "path";
import { nxViteTsPaths } from "@nx/vite/plugins/nx-tsconfig-paths.plugin";
export default defineConfig({ export default defineConfig({
cacheDir: "../node_modules/.vite/studio-web", cacheDir: "../node_modules/.vite/studio-web",
plugins: [ plugins: [
nxViteTsPaths(), nxViteTsPaths(),
dts({ wasm(),
entryRoot: "src", topLevelAwait(),
tsConfigFilePath: path.join(__dirname, "tsconfig.lib.json"), dts({
skipDiagnostics: true, entryRoot: "src",
}), tsConfigFilePath: path.join(__dirname, "tsconfig.lib.json"),
], skipDiagnostics: true,
}),
],
// Uncomment this if you are using workers. // Uncomment this if you are using workers.
// worker: { // worker: {
// plugins: [ nxViteTsPaths() ], // plugins: [ nxViteTsPaths() ],
// }, // },
// Configuration for building your library. // Configuration for building your library.
// See: https://vitejs.dev/guide/build.html#library-mode // See: https://vitejs.dev/guide/build.html#library-mode
build: { build: {
lib: { lib: {
// Could also be a dictionary or array of multiple entry points. // Could also be a dictionary or array of multiple entry points.
entry: "src/index.ts", entry: "src/index.ts",
name: "studio-web", name: "studio-web",
fileName: "index", fileName: "index",
// Change this to the formats you want to support. // Change this to the formats you want to support.
// Don't forget to update your package.json as well. // Don't forget to update your package.json as well.
formats: ["es", "cjs"], formats: ["es", "cjs"],
}, },
rollupOptions: { rollupOptions: {
// External packages that should not be bundled into your library. // External packages that should not be bundled into your library.
external: [], external: [
}, "lit",
}, "@storyteller/framework",
"@storyteller/studio",
],
},
},
test: { test: {
globals: true, globals: true,
cache: { cache: {
dir: "../node_modules/.vitest", dir: "../node_modules/.vitest",
}, },
environment: "jsdom", environment: "jsdom",
include: ["src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"], include: ["src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
}, },
}); });
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "@storyteller/studio", "name": "@storyteller/studio",
"version": "0.1.0", "version": "0.0.1",
"files": [ "files": [
"studio_bg.wasm", "studio_bg.wasm",
"studio.js", "studio.js",