Я создаю генератор Yeoman, который до этого момента работал правильно. Мой index.js правильно работает в папке моего приложения, создавая начальную структуру. В этом файле я часто использую this.fs.copy()
и this.fs.copyTpl()
, и оба работают нормально. Сейчас я нахожусь в процессе создания подгенератора, который расширяет yeoman.generators.NamedBase
в соответствии с требованиями документации здесь.
Моя файловая структура кажется правильной в соответствии с документацией на той же странице, на которую я ссылался выше. Это примерно так:
├───package.json
├───app/
│ └───index.js
└───view/
└───index.js
└───templates/
└───views/
└───view.html
Вот код, который я пытаюсь использовать для создания этого нового «представления» в моем проекте, расположенного в index.js
в каталоге представления.
'use strict';
var yeoman = require('yeoman-generator');
module.exports = yeoman.generators.NamedBase.extend({
copyFile: function() {
this.fs.copyTpl(
'views/view.html',
'app/views/'+this.name.toLowerCase()+'.html',
{ name: this.name.toLowerCase() }
);
}
});
Я запустил yo {generatorname}:view helloWorld
, ожидая, что он создаст новый файл на основе шаблона view.html
, который представляет собой следующий файл, очень просто:
<p>This is the <%= name %> view.</p>
Когда я запустил эту команду, я получил следующую ошибку.
events.js:85
throw er; // Unhandled 'error' event
^
TypeError: Cannot read property 'toString' of null
at copy.process (/Users/woodruffjb/dev/yeoman/{generatorname}/node_modules/yeoman-generator/node_modules/mem-fs-editor/actions/copy-tpl.js:11:33)
at applyProcessingFunc (/Users/woodruffjb/dev/yeoman/{generatorname}/node_modules/yeoman-generator/node_modules/mem-fs-editor/actions/copy.js:12:16)
at EditionInterface.exports._copySingle (/Users/woodruffjb/dev/yeoman/{generatorname}/node_modules/yeoman-generator/node_modules/mem-fs-editor/actions/copy.js:52:24)
at EditionInterface.exports.copy (/Users/woodruffjb/dev/yeoman/{generatorname}/node_modules/yeoman-generator/node_modules/mem-fs-editor/actions/copy.js:22:17)
at EditionInterface.module.exports [as copyTpl] (/Users/woodruffjb/dev/yeoman/{generatorname}/node_modules/yeoman-generator/node_modules/mem-fs-editor/actions/copy-tpl.js:9:8)
at module.exports.yeoman.generators.NamedBase.extend.copyFile (/Users/woodruffjb/dev/yeoman/{generatorname}/view/index.js:7:11)
at /Users/woodruffjb/dev/yeoman/{generatorname}/node_modules/yeoman-generator/lib/base.js:408:16
at processImmediate [as _immediateCallback] (timers.js:358:17)
Я попытался выяснить, была ли проблема в том, что this.name
было неопределенным или нулевым, но когда я сделал console.log(this.name)
, я получил правильный ответ, который был helloWorld
. После долгих поисков в Google единственный материал, который я смог найти по этой ошибке, касается других вещей, совершенно не связанных с тем, что я пытаюсь сделать, включая пакеты Atom и серверный код Node.js.
Все, о чем я могу думать, это то, что я как-то неправильно использую this.fs.copyTpl()
? Тем не менее, я использую его точно так же, как я использую его в моем файле app/index.js
для первоначальной настройки проекта. После всех моих поисков я застрял с этой проблемой. Согласно документации по этой функции, расположенной здесь, мне кажется делать это правильно. Кто-нибудь знает мою ошибку?