Как сослаться на шаблон nunjucks, включенный в модуль узла? - PullRequest
0 голосов
/ 09 июля 2020

Если я хочу упаковать файл шаблона nunjucks с модулем узла, как мне ссылаться на файл упакованного шаблона, чтобы он был универсально доступным, когда пакет установлен глобально?

У меня есть следующий файл узла, index.js:

#!/usr/bin/env node

var nunjucks = require('nunjucks');

var env = nunjucks.configure('./');
var template = env.getTemplate('template.html');
var output = template.render({
  h1_copy: "Foo and Bar"
});

console.log(output);

Вот шаблон. html:

<html>
  <body>
    <h1>{{ h1_copy }}</h1>
  </body>
</html>

Я настроил его, чтобы в пакете была бинарная команда. json:

"bin": {
  "make_output": "./index.js"
}

Теперь, если я установлю его глобально, я могу запустить make_output для вывода:

node-nunjucks$ npm install -g .
/usr/local/bin/make_output -> /usr/local/lib/node_modules/node-nunjucks/index.js
+ node-nunjucks@1.0.0
added 1 package in 0.099s

node-nunjucks$ make_output
<html>
  <body>
    <h1>Foo and Bar</h1>
  </body>
</html>

Но это работает, только если template.html присутствует в каталоге, в котором я запускаю команда. Если я попытаюсь запустить глобальную команду из любого другого места, он не сможет найти шаблон:

node-nunjucks$ cd ..
tmp$ make_output
/private/tmp/node-nunjucks/node_modules/nunjucks/src/environment.js:296
          throw err;
          ^

Error: template not found: template.html

Как мне сослаться на упакованный файл шаблона в index.js, чтобы он использовал шаблон в пакете (тот, что находится на /usr/local/lib/node_modules/node-nunjucks/template.html), а не искать шаблон в моем рабочем каталоге?

1 Ответ

0 голосов
/ 09 июля 2020

Вызов configure - это тот вызов, который вы захотите настроить. Он сообщает getTemplate, где искать шаблоны. Он может принимать массив значений, относящихся к нескольким каталогам, в которых он может находить шаблоны.

Пример:

#!/usr/bin/env node
var nunjucks = require('nunjucks');

var env = nunjucks.configure(['./', './node_modules/node_nunjucks/']);
var template = env.getTemplate('inner.html');
var output = template.render({
  h1_copy: "Foo and Bar"
});
var template2 = env.getTemplate('outer.html');
var output2 = template2.render({
  h1_copy: "Foo2 and Bar2"
});


console.log(output);
console.log(output2);

В этом примере inner. html находится в root рядом с index. js, а external. html находится в node_modules / node_nunjucks. Это просто относительный путь к папке node_modules, но вы можете поумнее использовать псевдонимы и многое другое, в зависимости от того, какие инструменты вы используете для сборки.

Надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...