fix: underscore escaping for dotfiles (#1737)

* WIP: fix undersocre escaping for dotfiles 

(fix #1732)

* Fix charAt

* adding a short explanation to the docs.

* improved wording
This commit is contained in:
Thorsten Lünborg
2018-07-04 13:12:18 +02:00
committed by Guillaume Chau
parent 286d75ea12
commit a9aa3decf6
2 changed files with 28 additions and 1 deletions

View File

@@ -235,6 +235,30 @@ export default {
<%# END_REPLACE %>
```
#### Filename edge cases
If you want to render a template file that either begins with a dot (i.e. `.env`) you will have to follow a specific naming convention, since dotfiles are ignored when publishing your plugin to npm:
```
# dotfile templates have to use an underscore instead of the dot:
/generator/template/_env
# When calling api.render('./template'), this will be rendered in the project folder as:
.env
```
Consequently, this means that you also have to follow a special naming convention if you want to render file whose name actually begins with an underscore:
```
# such templates have to use two underscores instead of the dot:
/generator/template/__variables.scss
# When calling api.render('./template'), this will be rendered in the project folder as:
_variables.scss
```
### Prompts
#### Prompts for Built-in Plugins

View File

@@ -138,9 +138,12 @@ class GeneratorAPI {
let filename = path.basename(rawPath)
// dotfiles are ignored when published to npm, therefore in templates
// we need to use underscore instead (e.g. "_gitignore")
if (filename.charAt(0) === '_') {
if (filename.charAt(0) === '_' && filename.charAt(1) !== '_') {
filename = `.${filename.slice(1)}`
}
if (filename.charAt(0) === '_' && filename.charAt(1) === '_') {
filename = `${filename.slice(1)}`
}
const targetPath = path.join(path.dirname(rawPath), filename)
const sourcePath = path.resolve(source, rawPath)
const content = renderFile(sourcePath, data, ejsOptions)