v3.0.0
This commit is contained in:
		@@ -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 должен быть отключён.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										29
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								index.js
									
									
									
									
									
								
							@@ -2,25 +2,20 @@ import nunjucks from 'nunjucks';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
export default ({types: t}) => {
 | 
					export default ({types: t}) => {
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
        visitor: {
 | 
					        pre(state) {
 | 
				
			||||||
            Identifier(path, state) {
 | 
					            const options = state.opts.plugins[0].options;
 | 
				
			||||||
                for (let i = 0; i < state.opts.varNames.length; i += 1) {
 | 
					            this.njkenv = new nunjucks.Environment(new nunjucks.FileSystemLoader(options.templatesFolder));
 | 
				
			||||||
                    if (
 | 
					            if (options.globals) {
 | 
				
			||||||
                        path.parentPath.type === 'VariableDeclarator' &&
 | 
					                options.globals.forEach(({name, value}) => {
 | 
				
			||||||
                        path.isIdentifier({name: state.opts.varNames[i]})
 | 
					                    this.njkenv.addGlobal(name, value);
 | 
				
			||||||
                    ) {
 | 
					 | 
				
			||||||
                        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})];
 | 
					        visitor: {
 | 
				
			||||||
                        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));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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"
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user