Neural Prediction Model

    workspace-resolver

    0.0.4 • Public • Published

    Workspace Resolver

    npm version License

    Utility for development on multiple library packages in a workspace. Creates aliases for library packages so you don't have to rebuild both packages to see changes. This can be considered an alternative to monorepos and npm-link.

    Terminology

    • <app>: Is your main application package. This package is responsible for bundling an asset for use with a server or as a static website. It imports one or more <library> packages.
    • <library>: Is any of the packages that are imported by the <app> package. When releasing this package, it should transpile code into javascript that can be understood by the node version used in the <app> package (usually indicated by the package.json#engines property in the <library>/package.json).
    • workspace: Refers the parent directory of the <app> and <library> packages.
    └── workspace
        ├── library-1
        ├── library-2
        └── app
    

    Basic Usage

    Basic usage instructions for the main 2 utilities, spawn and resolve.

    resolve

    Creates an object map of <package#name>: <path-to-package-json> that you can use in an alias configuration, such as webpack#resolve.alias parameter.

    See the resolve options section for details for any of these options. Below are their default values. For the most part, workspacePath, include and exclude will likely be the ones you want to play with.

    import workspace from 'workspace-resolver'
    
    workspace.resolve({
      deep: Infinity,
      exclude: [],
      include: [],
      lazyMatch: true,
      workspacePath: path.resolve('..'),
    })
    
    // {
    //   'workspace-resolver': '/workspace/workspace-resolver',
    //   'my-app': '/workspace/app',
    // }

    spawn

    Spawns a process. See the spawn options section for details for any of these options.

    import workspace from 'workspace-resolver'
    
    workspace.spawn({
      pkgName: 'workspace-resolver',
      pkgPath: path.resolve(__dirname, '..', 'WorkspaceResolver'),
    }, 'npm', ['run', 'watch'])

    Together

    If you are planning to spawn watch processes, you'll probably want to use these together:

    import workspace from 'workspace-resolver'
    
    const alias = workspace.resolve({workspacePath: path.resolve(__dirname, '..')})
    
    // Run "npm run watch" in all alias
    Object.entries(alias).forEach(([pkgName, pkgPath]) => {
      workspace.spawn({ pkgName, pkgPath}, 'npm', ['run', 'watch'])
    })
    
    // Run "make build --watch" in a single alias
    workspace.spawn({
      pkgName: 'workspace-resolver',
      pkgPath: alias['workspace-resolver'],
    }, 'make', ['build', '--watch'])

    Options

    resolve options

    Field Type Default Description
    deep number Infinity How many directories deep to search (from workspacePath). If there are multiple package.json files in workspace, be sure to set lazyMatch=false.
    exclude [string] [] Array of glob patterns or package names to exclude. '**/node_modules' is always excluded.
    include [string] [] Array of package names that must match in order to be aliased. When specified with exclude or aliasWatchPackagesOnly all rules must pass.
    lazyMatch boolean true Use the first matching package.json to indicate the alias directory for a given package.json#name. If false, matches will be greedy and the last match will be used for the package.json#name alias and watch path.
    workspacePath string path.resolve('..') Path to your workspace.

    spawn options

    Field Type Default Description
    pkg.pkgName string "" Npm package name (from package.json#name or package directory name in workspace dir)
    pkg.pkgPath string "" Absolute path to package source root directory (the directory that contains package.json)
    manager string "npm" Executable that handles installing and packaging.
    args [string] ["run", "watch"] Array of arguments to pass to the manager.
    logWatchProcesses boolean true Set to false to suppress output from watch sub processes.

    Common Integration Tips

    Below are suggested uses for integrating these utilities with other build tools. If you would like to create a plugin for any of these; 1. You are awesome! ❤️ 2. Please let us know by creating a ticket so we can reference your plugin in these docs.

    Contributing

    See CONTRIBUTING.

    Security

    See CONTRIBUTING#security-issue-notifications for more information.

    License

    This project is licensed under the Apache-2.0 License.

    Keywords

    none

    Install

    npm i workspace-resolver

    DownloadsWeekly Downloads

    4

    Version

    0.0.4

    License

    Apache-2.0

    Unpacked Size

    24.6 kB

    Total Files

    11

    Last publish

    Collaborators

    • goldhand