apply-publishconfig v1.1.0
apply-publishconfig
Quickly apply a publishConfig into a dependency package.json for deployment
Overview
This package will apply a publishConfig in-place to a project. I have thrown this solution together to build Node server applications with Turborepo internal packages, whilst maintaining the full local development experience. I found a PR that suggests that this feature is implemented into pnpm deploy, but it wasn't working on my end. This was built with Turborepo in mind, but there's no reason why it cannot also be used in other contexts.
Related discussions:
Running the script will edit the internal package's package.json in-place and will apply the publishConfig. Supported fields include main and exports
diff --git a/package.json b/package.json
index f3df0d5..a49f857 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,7 @@
"version": "1.0.0",
- "main": "./src/index.ts",
+ "main": "./dist/index.js",
"types": "./src/index.ts",
"scripts": {
"build": "tsup src/index.ts",
@@ -16,9 +16,6 @@
- "publishConfig": {
- "main": "./dist/index.js"
- },Usage
Install the package using your package manager:
$ pnpm add -D apply-publishconfigAdd a script to your internal package's package.json with a publishConfig:
"main": "./src/index.ts",
"types": "./src/index.ts",
"scripts": {
"publish:apply": "apply-publishconfig"
},
"publishConfig": {
"main": "./dist/index.js"
},Add a pipeline to your root turbo.json:
{
"$schema": "https://turbo.build/schema.json",
"pipeline": {
"publish:apply": {
"cache": false
}
}
}Now when building your app, you can execute the publish:apply pipeline:
$ turbo run publish:applyDocker example
...
RUN --mount=type=bind,source=.git,target=.git \
turbo run build -F "${WORKSPACE}"... \
&& turbo run publish:apply -F "${WORKSPACE}"...
RUN --mount=type=cache,id=pnpm,target=/pnpm/store \
pnpm deploy -F "${WORKSPACE}" --prod deployed
...