如何更改现有 nx 原理图的模板文件
Posted
技术标签:
【中文标题】如何更改现有 nx 原理图的模板文件【英文标题】:How to change the template file(s) for an existing nx schematic 【发布时间】:2020-01-30 15:27:35 【问题描述】:我最近开始使用https://nx.dev/ 来重组现有的具有多个反应前端和redux 状态管理的monorepo。
nx 提供了使用@nrwl/react:redux
原理图开箱即用创建新redux 切片的能力,例如:nx g @nrwl/react:redux <sliceName>
。这很棒!但是,用于创建新文件的模板不符合我的需要(例如我不使用 redux-thunk...),我想使用自己的模板。
我使用nx g workspace-schematic redux-module
创建了一个新的自定义原理图,并对其进行了调整以扩展@nrwl/react:redux
,例如:
import chain, externalSchematic, Rule from '@angular-devkit/schematics';
export default function(schema: any): Rule
return chain([
externalSchematic('@nrwl/react', 'redux',
name: schema.name
)
]);
谁能告诉我如何从这里着手使自定义原理图使用我自己的模板文件?
谢谢!
【问题讨论】:
【参考方案1】:您可以将模板文件放在目录中,加载它们然后复制到目标destination.e.g.
目录结构:
Project_root
|- tools
|- schematics
|- your_schematics
|- index.ts
|- templates
|- __name@dasherize__.custom.ts
内容:
/* __name@dasherize__.custom.ts */
export class <%= classify(name) %>Custom
constructor ()
/* index.ts */
import chain, externalSchematic, Rule, url, apply, move, mergeWith, MergeStrategy, template, SchematicContext from '@angular-devkit/schematics';
import dasherize, classify from '@angular-devkit/core/src/utils/strings';
import normalize, strings from '@angular-devkit/core';
export default function(schema: any): Rule
const libFileName = dasherize(schema.name);
const projectDirectory = schema.directory
? normalize(schema.directory + '/' + libFileName)
: libFileName;
const projectRoot = normalize('libs/' + projectDirectory);
return chain([
externalSchematic('@nrwl/workspace', 'lib', schema),
addCustomFileToLib(schema, projectRoot)
]);
function addCustomFileToLib(schema: any, projectRoot: string): Rule
const templateFiles = url("./templates");
const newTree = apply(templateFiles, [
move(projectRoot),
template(
...strings,
...schema // pass the objects containing the properties & functions to be used in template file
)
]);
return mergeWith(newTree, MergeStrategy.Default);
注意:模板文件的名称(__name@dasherize__.custom.ts
) 是一个表达式,将根据执行原理图时从 cli 传递的 name 参数进行编译/更改。
【讨论】:
谢谢!我会试一试并报告。不幸的是,此刻有点忙于其他事情......以上是关于如何更改现有 nx 原理图的模板文件的主要内容,如果未能解决你的问题,请参考以下文章
UG NX二次开发(C#)--详细讲述编程模板NXOpen_CS_Wizard的代码意义,帮你轻松进入NXOpen(C#)二次开发
如何在 DevOps Server 2020 中为现有项目更改流程模板