This commit is contained in:
Valentin Silytuin 2022-12-15 16:35:15 +06:00
parent dd3ed64c66
commit 1f153076fe
3 changed files with 17 additions and 24 deletions

View File

@ -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 должен быть отключён.

View File

@ -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;
}
} }
}, },
}, },

View File

@ -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"