Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rdarida/lerna-templater
Generates package from template for a Lerna Monorepo Project
https://github.com/rdarida/lerna-templater
generator lerna package template
Last synced: about 1 month ago
JSON representation
Generates package from template for a Lerna Monorepo Project
- Host: GitHub
- URL: https://github.com/rdarida/lerna-templater
- Owner: rdarida
- License: mit
- Created: 2021-10-27T15:08:16.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-04-24T05:42:35.000Z (5 months ago)
- Last Synced: 2024-04-24T07:27:07.961Z (5 months ago)
- Topics: generator, lerna, package, template
- Language: TypeScript
- Homepage: https://rdarida.github.io/lerna-templater
- Size: 835 KB
- Stars: 2
- Watchers: 1
- Forks: 3
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
lerna-templater
Generates package from template for a Lerna Monorepo Project
## Installing
You can get **`lerna-templater`** via **[npm](https://npmjs.org/package/lerna-templater)**.
```
npm i -D lerna-templater
```## Usage
### As an import
```ts
import { TemplaterOptions, templater } from 'lerna-template';/**
* @param {string} cwd The current working directory.
* @param {TemplaterOptions} options The options for templater.
*/
templater(cwd, options);
```
### As a commandline tool
```
npx lerna-templater -n "Name of the new package" -d "Description of the new package"
```or
```json
"scripts": {
"create": "lerna-templater"
}
``````
npm run create -- -n "Name of the new package" -d "Description of the new package"
```## API
### `templater(cwd, optioins)`
Generates a new package from **`cwd`/`options.template`** directory into **`cwd`/`options.packages`/`options.name`** directory. The **`cwd`** argument is the current working directory.### `TemplaterOptions`
- **`name`** **string**, **required**
The name of the new package
- **`description`** **string**, **optional**
The description of the new package.
- **`scope`** **string**, **optional**
The scope of the new package. Default value is the scope of the *main package.json*.
- **`packages`** **string**, **optional**
The relative path of the packages directory. Default value is the first element of the *lerna.json's packages array*.
- **`template`** **string**, **optional**
The relative path of the template directory. Default values is *\_\_template\_\_*.### Mustache templating
The **lerna-templater** uses [Mustache.js](https://npmjs.org/packages/mustache) for templating. If the *template* directory contains files which ends with **.mustache**, the templater will render them with Mustache.js. After the rendering, the **.mustache** extension will be removed from the filename. For example: `package.json.mustache` will be saved as `package.json`.#### Available tags:
- `{{{name}}}` - The name of the new package.
- `{{{description}}}` - The description of the new package.
- `{{{scope}}}` - The scope of the new package.
- `{{{packages}}}` - The relative path of the packages (output) directory.
- `{{{template}}}` - The relative path of the template (input) directory.
- `{{{version}}}` - The version of the new package.
- `{{{repoDir}}}` - The relative path of the new package in the repository.### Example
#### Directory structure
.
├── __template__/
| ├── package.json.mustache
| └── README.md.mustache
├── packages/
├── lerna.json
└── package.json#### Content of the files
- \_\_template\_\_/**package.json.mustache**:
```json
{
"name": "{{{scope}}}{{{name}}}",
"description": "{{{description}}}",
"version": "{{{version}}}",
"repository": {
"directory": "{{{repoDir}}}"
}
}
```
- \_\_template\_\_/**README.md.mustache**:
```md
# {{{name}}}
{{{description}}}
```
- **lerna.json**:
```json
{
"packages": [
"packages/*"
],
"version": "0.0.0"
}
```
- **package.json**:
```json
{
"name": "@examplescope/example-monorepo"
}
```#### Output
Running the `npx lerna-templater -n "example-newpackage" -d "Description for the new example package"` command will result this output:
- **packages/example-newpackage** directory
- **package.json** and **README.md** in the *packages/example-newpackage* directory
- package.json:
```json
{
"name": "@examplescope/example-newpackage",
"description": "Description for the new example package",
"version": "0.0.0",
"repository": {
"directory": "packages/example-newpackage"
}
}
```
- README.md:
```md
# example-newpackage
Description of the new example package
```
Resources
- Add resources here