v3.0.0
This commit is contained in:
parent
dd3ed64c66
commit
1f153076fe
|
@ -10,10 +10,10 @@ yarn add -D @advdominion/babel-plugin-nunjucks
|
||||||
|
|
||||||
## Использование
|
## Использование
|
||||||
|
|
||||||
Код для преобразования должен находиться в переменных, имена которых указываются в массиве `varNames`, и быть [шаблонным литералом](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/template_strings). Пример:
|
Используются [Tagged templates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates) с тегом `njk`:
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const nunjucksTemplate = `
|
njk`
|
||||||
{% from "./item.njk" import item as item %}
|
{% from "./item.njk" import item as item %}
|
||||||
|
|
||||||
<div class="items">
|
<div class="items">
|
||||||
|
@ -52,7 +52,6 @@ const nunjucksTemplate = `
|
||||||
'@advdominion/babel-plugin-nunjucks',
|
'@advdominion/babel-plugin-nunjucks',
|
||||||
{
|
{
|
||||||
templatesFolder: 'src/templates/',
|
templatesFolder: 'src/templates/',
|
||||||
varNames: ['nunjucksTemplate'],
|
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
@ -65,8 +64,7 @@ const nunjucksTemplate = `
|
||||||
|
|
||||||
## Опции
|
## Опции
|
||||||
|
|
||||||
- `templatesFolder` - обязательный параметр, путь до папки с файлами шаблонов
|
- `templatesFolder` - строка, обязательный параметр. Путь до папки с файлами шаблонов
|
||||||
- `globals` - массив, необязательный параметр. Глобальные переменные для Nunjucks (например, `[{name: "message", value: "Hello, world!"}]`)
|
- `globals` - массив, необязательный параметр. Глобальные переменные для Nunjucks (например, `[{name: "message", value: "Hello, world!"}]`)
|
||||||
- `varNames` - массив, обязательный параметр. Имена переменных для преобразования кода шаблонизатора
|
|
||||||
|
|
||||||
**Важно:** Параметр `cacheDirectory` в опциях babel-loader должен быть отключён.
|
**Важно:** Параметр `cacheDirectory` в опциях babel-loader должен быть отключён.
|
||||||
|
|
31
index.js
31
index.js
|
@ -2,25 +2,20 @@ import nunjucks from 'nunjucks';
|
||||||
|
|
||||||
export default ({types: t}) => {
|
export default ({types: t}) => {
|
||||||
return {
|
return {
|
||||||
|
pre(state) {
|
||||||
|
const options = state.opts.plugins[0].options;
|
||||||
|
this.njkenv = new nunjucks.Environment(new nunjucks.FileSystemLoader(options.templatesFolder));
|
||||||
|
if (options.globals) {
|
||||||
|
options.globals.forEach(({name, value}) => {
|
||||||
|
this.njkenv.addGlobal(name, value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
visitor: {
|
visitor: {
|
||||||
Identifier(path, state) {
|
TaggedTemplateExpression(path) {
|
||||||
for (let i = 0; i < state.opts.varNames.length; i += 1) {
|
if (path.get('tag').isIdentifier({name: 'njk'})) {
|
||||||
if (
|
const render = this.njkenv.renderString(path.node.quasi.quasis[0].value.raw);
|
||||||
path.parentPath.type === 'VariableDeclarator' &&
|
path.replaceWith(t.stringLiteral(render));
|
||||||
path.isIdentifier({name: state.opts.varNames[i]})
|
|
||||||
) {
|
|
||||||
const templatesFolder = state.opts.templatesFolder;
|
|
||||||
const value = path.parentPath.get('init').node.quasis[0].value.raw;
|
|
||||||
const env = new nunjucks.Environment(new nunjucks.FileSystemLoader(templatesFolder));
|
|
||||||
if (state.opts.globals) {
|
|
||||||
state.opts.globals.forEach(({name, value}) => {
|
|
||||||
env.addGlobal(name, value);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const render = env.renderString(value);
|
|
||||||
path.parentPath.get('init').node.quasis = [t.templateElement({cooked: render, raw: render})];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@advdominion/babel-plugin-nunjucks",
|
"name": "@advdominion/babel-plugin-nunjucks",
|
||||||
"version": "2.1.0",
|
"version": "3.0.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^16.0.0"
|
"node": "^16.0.0"
|
||||||
|
|
Loading…
Reference in New Issue