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
|
||||
const nunjucksTemplate = `
|
||||
njk`
|
||||
{% from "./item.njk" import item as item %}
|
||||
|
||||
<div class="items">
|
||||
|
@ -52,7 +52,6 @@ const nunjucksTemplate = `
|
|||
'@advdominion/babel-plugin-nunjucks',
|
||||
{
|
||||
templatesFolder: 'src/templates/',
|
||||
varNames: ['nunjucksTemplate'],
|
||||
},
|
||||
],
|
||||
],
|
||||
|
@ -65,8 +64,7 @@ const nunjucksTemplate = `
|
|||
|
||||
## Опции
|
||||
|
||||
- `templatesFolder` - обязательный параметр, путь до папки с файлами шаблонов
|
||||
- `templatesFolder` - строка, обязательный параметр. Путь до папки с файлами шаблонов
|
||||
- `globals` - массив, необязательный параметр. Глобальные переменные для Nunjucks (например, `[{name: "message", value: "Hello, world!"}]`)
|
||||
- `varNames` - массив, обязательный параметр. Имена переменных для преобразования кода шаблонизатора
|
||||
|
||||
**Важно:** Параметр `cacheDirectory` в опциях babel-loader должен быть отключён.
|
||||
|
|
29
index.js
29
index.js
|
@ -2,25 +2,20 @@ import nunjucks from 'nunjucks';
|
|||
|
||||
export default ({types: t}) => {
|
||||
return {
|
||||
visitor: {
|
||||
Identifier(path, state) {
|
||||
for (let i = 0; i < state.opts.varNames.length; i += 1) {
|
||||
if (
|
||||
path.parentPath.type === 'VariableDeclarator' &&
|
||||
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);
|
||||
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);
|
||||
});
|
||||
}
|
||||
const render = env.renderString(value);
|
||||
path.parentPath.get('init').node.quasis = [t.templateElement({cooked: render, raw: render})];
|
||||
break;
|
||||
}
|
||||
},
|
||||
visitor: {
|
||||
TaggedTemplateExpression(path) {
|
||||
if (path.get('tag').isIdentifier({name: 'njk'})) {
|
||||
const render = this.njkenv.renderString(path.node.quasi.quasis[0].value.raw);
|
||||
path.replaceWith(t.stringLiteral(render));
|
||||
}
|
||||
},
|
||||
},
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "@advdominion/babel-plugin-nunjucks",
|
||||
"version": "2.1.0",
|
||||
"version": "3.0.0",
|
||||
"type": "module",
|
||||
"engines": {
|
||||
"node": "^16.0.0"
|
||||
|
|
Loading…
Reference in New Issue