-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Creating a new package
This document describes how to create and publish a new Blueprint package to npm (e.g. @blueprintjs/core, @blueprintjs/table, etc).
To start, create a new directory in /packages/
, e.g. /packages/loremipsum
.
Copy the following files from the datetime
package into the loremipsum package, leaving them untouched:
.npmignore
LICENSE
karma.conf.js
Copy/paste the package.json
from the datetime
package and change things accordingly:
-
"name"
-"@blueprintjs/loremipsum"
-
"version"
-"1.0.0"
-
"description"
- enter a short description of the package. -
"style"
- the convention is to usedist/blueprint-loremipsum.css
. -
"unpkg"
-dist/loremipsum.bundle.js
. -
"keywords"
- keep at least"palantir"
and"blueprint"
, and add other relevant keywords. -
"dependencies"
- make sure to add"@blueprintjs/core"
as a dependency toloremipsum
- this gives us access to core features. keep/delete other packages as needed (quick note -"tslib"
is an easy win that emits smaller bundles; best to leave it in). -
"peerDependencies"
- delete this since core (which is a dependency) specifies the relevant peer deps.
Add a README.md
to document the responsibilities of that package - you can probably copy/paste from table
or datetime
and modify accordingly.
Be aware that the npmjs.com listing uses the README in its UI - for example: https://www.npmjs.com/package/@blueprintjs/table.
Copy/paste the webpack.config.js
from datetime
and change things accordingly:
- Replace
entry: { - core: ... + loremipsum: ... }
- Replace
output: { - library: ["Blueprint", "Core"], + library: ["Blueprint", "Loremipsum"], }
Now we'll setup the src/
folder.
- Copy/paste the
tsconfig.json
,tsconfig.cjs.json
fromdatetime
. - Write your main package export in
src/index.ts
. - Write your main styles in
src/blueprint-loremipsum.scss
. - Add an
index.md
file (copy fromdatetime
). Modify theindex.md
to suit the new package. Our docs files conform to Documentalist. - Add a link to your docs page in
/packages/docs-app/src/_nav.md
:# this will look for loremipsum/src/index.md +@page loremipsum
- Add examples in /packages/docs-app/src/examples (e.g. creating a
loremipsum-examples
directory). - Add
@blueprintjs/loremipsum
as a dependency in/packages/docs-app/package.json
. - run
yarn
from the top-level folder to linkloremipsum
todocs-app
. - Update
/packages/docs-app/src/tags/reactExamples.ts
to include your examples:import * as LabsExamples from "../examples/labs-examples"; +import * as LoremIpsumExamples from "../examples/loremipsum-examples"; import * as TableExamples from "../examples/table-examples"; ... addPackageExamples("labs", LabsExamples as any); +addPackageExamples("loremipsum", LoremIpsumExamples as any); addPackageExamples("table", TableExamples as any);
- Create a
test/tsconfig.json
file (you can copy/paste thedatetime
one). - Have an
index.ts
file that imports or otherwise runs all your tests. - Copy/paste
test/isotest.js
fromdatetime
. You can usually just use it as is (replacing the DateTime package name). This is to hook up blueprint's isomorphic testing framework to ensure your package components can render from the server-side.
💁 Confirm that things are hooked up by running yarn verify
from the top-level folder.
Now that the package itself is setup, there's just a few steps to get it working within the entire Blueprint monorepo.
You'll want to add a few things to the top-level /package.json
file:
"scripts": {
// add a dev task for your package (include other blueprint dependencies within the scope)
+ "dev:loremipusm": "lerna run dev --parallel --scope '@blueprintjs/{core,loremipsum}'",
- "dist:libs": "lerna run dist --parallel --scope '@blueprintjs/{core,datetime,docs,labs,table}'",
// add your package to the dist:libs task
+ "dist:libs": "lerna run dist --parallel --scope '@blueprintjs/{core,datetime,docs,labs,loremipusm,table}'",
}
Lastly you'll want to modify the CircleCI build script to a) run the package's tests and b) publish the new package. Open up /.circleci/config.yml
and make the following changes:
jobs:
dist-libs:
steps:
- persist_to_workspace:
paths:
+ - packages/loremipsum/dist
+ test-loremipsum:
+ docker:
+ - image: circleci/node:8
+ steps:
+ - checkout
+ - attach_workspace:
+ at: '.'
+ - restore_cache:
+ key: v1-dependency-cache-{{ checksum "yarn.lock" }}
+ - run: yarn lerna run test --scope '@blueprintjs/loremipsum'
workflows:
compile_lint_test_dist_deploy:
jobs:
+ - test-loremipsum:
+ requires: [compile-libs]
- deploy-preview:
requires:
+ - test-loremipsum
After that, commit and merge the change, and your new package will be published!
- react-day-picker v8 migration
- HotkeysTarget & useHotkeys migration
- PanelStack2 migration
- Table 6.0 changes