@guanghechen/helper-plop
TypeScript icon, indicating that this package has built-in type declarations

6.0.0-alpha.5 • Public • Published

A collection of utility functions for plop templates.

Install

  • npm

    npm install --save-dev @guanghechen/helper-plop
  • yarn

    yarn add --dev @guanghechen/helper-plop

Usage

This package exposed some inquirer question and answer resolver.

Npm package

  • NpmPackagePreAnswers:

    Name Type Description
    cwd string Current workspace directory
    isMonorepo boolean Whether if this package under a monorepo
  • NpmPackagePromptsAnswers:

    Name Type Description
    packageName string Npm package name
    packageAuthor string Package author
    packageVersion string Package version
    packageDescription string Package description
    packageLocation string Package location (path relative to the current directory)
  • NpmPackageData:

    Extended NpmPackagePreAnswers and NpmPackagePromptsAnswers With following Additional properties.

    Name Type Description
    packageUsage string Package usage
    repositoryName string Git repository name
    repositoryHomepage string Git repository homepage

Example

I recommend you use the following template directory structure:

├── boilerplate/
│   ├── package.json.hbs
│   ├── README.md.hbs
│   ├── rollup.config.js.hbs
│   ├── src
│   │   └── index.ts.hbs
│   ├── tsconfig.json.hbs
│   ├── tsconfig.settings.json.hbs
│   └── tsconfig.src.json.hbs
├── node_modules/
├── cli.js
├── index.js
├── package.json
└── README.md

Where the index.js exposed a default plop config, such as:

const {
  createNpmPackagePrompts,
  resolveNpmPackageAnswers,
  resolveNpmPackagePreAnswers,
} = require('@guanghechen/helper-plop')
const path = require('path')
const manifest = require('./package.json')

module.exports = async function (plop) {
  const preAnswers = await resolveNpmPackagePreAnswers()
  const defaultAnswers = { packageVersion: manifest.version }
  const { cwd, isMonorepo } = preAnswers
  const prompts = await createNpmPackagePrompts(preAnswers, defaultAnswers)

  plop.setGenerator('ts-package', {
    description: 'create template typescript project',
    prompts: [...prompts],
    actions: function (_answers) {
      const answers = resolveNpmPackageAnswers(preAnswers, _answers)
      answers.toolPackageVersion = manifest.version

      const resolveSourcePath = p =>
        path.normalize(path.resolve(__dirname, 'boilerplate', p))
      const resolveTargetPath = p =>
        path.normalize(path.resolve(answers.packageLocation, p))
      const relativePath = path.relative(answers.packageLocation, cwd)

      // Assign resolved data into plop templates.
      Object.assign(_answers, answers)

      return [
        {
          type: 'add',
          path: resolveTargetPath('package.json'),
          templateFile: resolveSourcePath('package.json.hbs'),
        },
        {
          type: 'add',
          path: resolveTargetPath('README.md'),
          templateFile: resolveSourcePath('README.md.hbs'),
        },
        !isMonorepo && {
          type: 'add',
          path: resolveTargetPath('rollup.config.js'),
          templateFile: resolveSourcePath('rollup.config.js.hbs'),
        },
      ].filter(Boolean)
    },
  })
}

And the cli.js exposed a Node.js CLI script, such as:

#! /usr/bin/env node

const { launch } = require('@guanghechen/helper-plop')
const path = require('path')

launch(
  process.argv,
  args => ({
    configPath: args.plopfile || path.join(__dirname, 'index.js'),
  })
)

Related

Readme

Keywords

Package Sidebar

Install

npm i @guanghechen/helper-plop

Weekly Downloads

2

Version

6.0.0-alpha.5

License

MIT

Unpacked Size

76.8 kB

Total Files

8

Last publish

Collaborators

  • lemonclown