@guanghechen/helper-plop
v6.0.0-alpha.5
Published
A collection of utility functions for plop templates
Downloads
33
Readme
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 directoryisMonorepo
|boolean
| Whether if this package under a monorepoNpmPackagePromptsAnswers
:Name | Type | Description :--------------------:|:---------:|:-----------------:
packageName
|string
| Npm package namepackageAuthor
|string
| Package authorpackageVersion
|string
| Package versionpackageDescription
|string
| Package descriptionpackageLocation
|string
| Package location (path relative to the current directory)NpmPackageData
:Extended
NpmPackagePreAnswers
andNpmPackagePromptsAnswers
With following Additional properties.Name | Type | Description :--------------------:|:---------:|:-----------------:
packageUsage
|string
| Package usagerepositoryName
|string
| Git repository namerepositoryHomepage
|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'),
})
)