0.1.7 • Published 5 months ago

@wendellhu/squirrel v0.1.7

Weekly downloads
-
License
MIT
Repository
-
Last release
5 months ago

🐿️ squirrel

A no (or low) config bundler for bundling Typescript libraries. Auto-detect secondary entry points and build them for you.

Usage

One-line command

npx run @wendellhu/squirrel

Or add this to your 'package.json' file

"scripts": {
+  "build": "squirrel"
}

install and then build

npm install @wendellhu/squirrel
npm run build

Config

{
    "$schema": {
        "type": "string"
    },
    "dest": {
        "description": "Destination for production files",
        "type": "string",
        "default": "publish"
    },
    "entryFileName": {
        "description": "Entry file name",
        "type": "string",
        "default": "publicApi.ts"
    },
    "srcRoot": {
        "description": "Root dir name of the source files",
        "type": "string",
        "default": "src"
    },
    "tsConfig": {
        "description": "Relative path to the ts config file",
        "type": "string",
        "default": "tsconfig.json"
    },
    "copyFiles": {
        "description": "Files should copied to dest folder",
        "type": "array",
        "default": ["README.md"]
    }
}

Secondary Entry Points

Sometimes you don't want to group symbols with those exported from the primary entry points. The module id of a secondary entry directs the module loader to a sub-directory by the secondary's name.

import { Injector } from '@wendellhu/redi' // a dependency injection framework
import { connectDependencies } from '@wendellhu/redi/react-bindings' // some utils to help bind your React app to the dependency injection framework

You can just put a 'package.json' file in that sub folder and create a 'publicApi.ts' file to export things you want to export:

/src
  /react-bindings
    publicApi.ts
    package.json
  publicApi.ts
// package.json
{
    "$schema": "https://raw.githubusercontent.com/wendellhu95/squirrel/master/src/schema/squirrel.schema.json",
    "entryFileName": "./publicApi.ts"
}
export { useInjector, WithDependency } from './reactHooks'
export { connectInjector, connectDependencies } from './reactComponent'
export { RediContext } from './reactContext'

And that's it! Squirrel would discover secondary entry points by searching these 'package.json' files.

Entry Point Encapsulation & Cyclic Dependency Prohibition

Import from files outside of a entry point via relative path is forbidden. Squirrel would throw error if it detect that entry point encapsulation is violated.

For example, relatively import secondary entry point 'src/foo' would cause an error.

// src/foo/bar.ts
import {} from '../buz.ts' // error!

You need to use absolute path to import in this case:

import {} from 'your-package-name'

Also, if an entry points cyclically depends on itself, Squirrel would throw an error and stop bundling.

// src/buz.ts
import {} from 'your-package-name/foo'

// src/foo/bar.ts
import {} from 'your-package-name' // error!

Used by

  • redi, a dependency injection library

License

MIT. Copyright 2021-present Wenzhao Hu.

0.1.7

5 months ago

0.1.6

5 months ago

0.1.5

5 months ago

0.1.4

3 years ago

0.1.3

3 years ago

0.1.2

3 years ago