冲突安全追加到 Yeoman 生成器中的现有文件
Conflict Safe Append to Existing File in Yeoman Generator
我正在为我正在进行的 Django/Angular 项目编写一个 yeoman 生成器。项目中的很大一部分样板文件涉及管理依赖项。为了使这种依赖关系管理更容易,我将某些文件本质上视为定义某个包导出或导入的内容的头文件。例如,当我在 my_app/models/
包中创建一个新文件 my_model.py
时,我想将行 from .my_model import MyModel
附加到 my_app/models/__init__.py
由于这只是一个简单的追加,并不特别依赖于 __init__.py
文件其余部分的内容,因此我认为这是一个非常安全的文件更新。我的问题是,从开发的角度来看,是否有一种方法可以将 yeoman 中的特定文件更新标记为安全的,从而允许用户在 运行 生成器的冲突解决阶段不必签署它们。
目前我执行追加的方式是这样的:
var self = this;
this.fs.copy(
this.destinationPath(this.props.appName + '/models/__init__.py'),
this.destinationPath(this.props.appName + '/models/__init__.py'),
{
process: function (contents) {
return contents += 'from .' + _.snakeCase(self.props.modelName) + ' import ' + self.props.modelName + '\n';
}
}
);
无法在冲突上签字。您没有责任为最终用户决定什么是 "safe" 什么不是。
如果您引入了一个破坏用户文件的错误怎么办?这就是生成器不能跳过冲突的原因。
有时您可能想要替换一些文件,例如在第一个 运行 上替换 gulp 或 g运行t 文件,即提取框架源代码...
Toby 在这里给出了一个很好的方法:
read here
我正在为我正在进行的 Django/Angular 项目编写一个 yeoman 生成器。项目中的很大一部分样板文件涉及管理依赖项。为了使这种依赖关系管理更容易,我将某些文件本质上视为定义某个包导出或导入的内容的头文件。例如,当我在 my_app/models/
包中创建一个新文件 my_model.py
时,我想将行 from .my_model import MyModel
附加到 my_app/models/__init__.py
由于这只是一个简单的追加,并不特别依赖于 __init__.py
文件其余部分的内容,因此我认为这是一个非常安全的文件更新。我的问题是,从开发的角度来看,是否有一种方法可以将 yeoman 中的特定文件更新标记为安全的,从而允许用户在 运行 生成器的冲突解决阶段不必签署它们。
目前我执行追加的方式是这样的:
var self = this;
this.fs.copy(
this.destinationPath(this.props.appName + '/models/__init__.py'),
this.destinationPath(this.props.appName + '/models/__init__.py'),
{
process: function (contents) {
return contents += 'from .' + _.snakeCase(self.props.modelName) + ' import ' + self.props.modelName + '\n';
}
}
);
无法在冲突上签字。您没有责任为最终用户决定什么是 "safe" 什么不是。
如果您引入了一个破坏用户文件的错误怎么办?这就是生成器不能跳过冲突的原因。
有时您可能想要替换一些文件,例如在第一个 运行 上替换 gulp 或 g运行t 文件,即提取框架源代码...
Toby 在这里给出了一个很好的方法: read here