diff --git a/README.md b/README.md
index 7dfcb02..89dc630 100644
--- a/README.md
+++ b/README.md
@@ -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 %}
@@ -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 должен быть отключён.
diff --git a/index.js b/index.js
index e22fd9d..2212de2 100644
--- a/index.js
+++ b/index.js
@@ -2,25 +2,20 @@ import nunjucks from 'nunjucks';
export default ({types: t}) => {
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: {
- 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);
- });
- }
- const render = env.renderString(value);
- path.parentPath.get('init').node.quasis = [t.templateElement({cooked: render, raw: render})];
- break;
- }
+ 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));
}
},
},
diff --git a/package.json b/package.json
index 3b6e223..5059990 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@advdominion/babel-plugin-nunjucks",
- "version": "2.1.0",
+ "version": "3.0.0",
"type": "module",
"engines": {
"node": "^16.0.0"