如何更改现有 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 原理图的模板文件的主要内容,如果未能解决你的问题,请参考以下文章

XSLT 如何组合模板并将现有字段添加到某些元素

UG NX二次开发(C#)--详细讲述编程模板NXOpen_CS_Wizard的代码意义,帮你轻松进入NXOpen(C#)二次开发

如何在 DevOps Server 2020 中为现有项目更改流程模板

二分图的模板

EPLAN 安装板布局图比多线原理图的要大吗?为啥适用于多线原理图的图框在安装板布局图里很小很小

nx二次开发外部库出错怎么解决