我正在尝试创建一个yeoman生成器,我必须从templatePath复制到destinationPath一些文件和文件夹,但我希望这些文件中包含一个变量,其中yeoman可以通过用户的一个输入进行更改。 / p>
喜欢:“<%= name%> -plugin.php” - > “你好-plugin.php”
我看到一些引用可以做到这一点,但我找不到。
我现在正在做:
//Copy the configuration files
app: function () {
this.fs.copyTpl(
this.templatePath('**'),
this.destinationPath(),
{
name: this.props.pluginName,
name_function: this.props.pluginName.replace('-', '_'),
name_class: this.props.className,
description: this.props.pluginDescription
}
);
}
我认为使用该代码我的<%= name%>会在copyTpl上神奇地改变但是它不起作用
答案 0 :(得分:3)
我刚刚找到the solution:
使用this.registerTransformStream();
通过某个node.js脚本管道所有文件。
var rename = require("gulp-rename");
//other dependecies...
module.exports = yeoman.Base.extend({
//some other things generator do...
writing: function() {
var THAT = this;
this.registerTransformStream(rename(function(path) {
path.basename = path.basename.replace(/(666replacethat666)/g, THAT.props.appName);
path.dirname = path.dirname.replace(/(666replacethat666)/g, THAT.props.appName);
}));
this.fs.copyTpl(
this.templatePath(),
this.destinationPath(), {
appName: this.props.appName
});
}
});
我在这里使用gulp-rename将文件名更改为其他内容。
假设this.props.appName == "myFirstApp"
,这个:
666replacethat666-controller.html
会将其名称更改为
myFirstApp-controller.html
答案 1 :(得分:1)
这是不可能的。该功能臃肿,并在2015年的某个时候被移除。
现在,只需重命名文件:
this.fs.copy('name.js', 'new-name.js')
答案 2 :(得分:1)
在@piotrek回答之后,我做了一个函数用一些模式替换所有道具(比如ejs) - > $$[your prop name]$$
。 警告:ES6内部
var rename = require("gulp-rename");
//other dependecies...
module.exports = yeoman.Base.extend({
//some other things generator do...
writing: function() {
this.registerTransformStream(rename((path) => {
for (let prop in this.props) {
let regexp = new RegExp('\\$\\$' + prop + '\\$\\$', 'g')
path.basename = path.basename.replace(regexp, this.props[prop]);
path.dirname = path.dirname.replace(regexp, this.props[prop]);
}
}));
this.fs.copyTpl(
this.templatePath(),
this.destinationPath(), {
appName: this.props.appName
});
}
});
示例:
假设您有this.props.appname = MyApp
和this.props.AnotherProps = Test
,并且您想要重命名文件或文件夹。
为您的文件或文件夹命名MyFile$$appname$$.js
- > MyFileMyApp.js
为您的文件或文件夹命名$$appname$$.js
- > MyApp.js
为您的文件或文件夹命名$$AnotherProps$$.js
- > Test.js