Neverending Plethora of Modules

    @wendellhu/squirrel

    0.1.4 • Public • Published

    🐿️ 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!

    Dependencies

    Used by

    • redi, a dependency injection library

    License

    MIT. Copyright 2021 Wendell Hu.

    Keywords

    none

    Install

    npm i @wendellhu/squirrel

    DownloadsWeekly Downloads

    0

    Version

    0.1.4

    License

    MIT

    Unpacked Size

    81.6 kB

    Total Files

    26

    Last publish

    Collaborators

    • wendellhu95