[Schematics] 0. Schematics "Hello World"
2024-10-20 00:40:06
1. Install schematics cli:
npm i -g @angular-devkit/schematics-cli@latest
2. Then run schematics
to create a new blank project:
schematics blank --name=my-component
It creates folder with number of files for you.
CREATE /my-component/README.md (639 bytes)
CREATE /my-component/package.json (539 bytes)
CREATE /my-component/tsconfig.json (656 bytes)
CREATE /my-component/.gitignore (191 bytes)
CREATE /my-component/.npmignore (64 bytes)
CREATE /my-component/src/collection.json (231 bytes)
CREATE /my-component/src/my-component/index.ts (318 bytes)
CREATE /my-component/src/my-component/index_spec.ts (474 bytes)
3. One important thing to do now, open .npmignore, remove line:
*.ts
It is because when you do `npm pack` to publish your schematics, it will remove all ts files, which is not what we want.
4. src/collection.json:
{
"$schema": "../node_modules/@angular-devkit/schematics/collection-schema.json",
"schematics": {
"my-component": {
"description": "A blank schematic.",
"factory": "./my-component/index#myComponent"
}
}
}
The highlighted part, is the name of your schematics. Run the following command from the my-component
directory.
schematics .:my-component
By default schematics run in staging mode, which means it won't generate any files for you. Instaed you can run:
schematics .:my-component --dry-run=false
5. Let’s do something slightly more interesting than making sure it runs and create a hello.ts
file. Modify my-component/index.ts
to have a tree.create()
command.
import { Rule, SchematicContext, Tree } from '@angular-devkit/schematics'; export function myComponent(_options: any): Rule {
return (tree: Tree, _context: SchematicContext) => {
tree.create('hello.ts', 'console.log("Hello, World")');
return tree;
};
}
describe('my-component', () => {
it('works', () => {
const runner = new SchematicTestRunner('schematics', collectionPath);
const tree = runner.runSchematic('my-component', {}, Tree.empty()); expect(tree.files).toEqual(['/hello.ts']);
});
});
最新文章
- Titanium.App.Properties 对象
- 让JNLP应用程序从Firefox浏览器启动起来
- [Java] Java IO Files
- JDK1.5新特性随手记
- Java7新特性(一)Coin
- WinForm中嵌入WebBrowser,并且支持C#和JS方法的相互调用
- Linux系统迁移
- spring boot / cloud (八) 使用RestTemplate来构建远程调用服务
- C#之FTP上传下载(一)
- path和classpath的区别
- 列表(list) ----python
- buaaoo_second_improvement
- sessionStorage数组、对象的存储和读取
- angular.isElement()
- 【转】dos下 和 批处理中的 for 语句的基本用法
- MOSFET的半桥驱动电路设计要领详解
- too many open files(打开的文件过多)解决方法
- SQL DATE_FORMAT() 函数
- python type的用法
- 经典算法分析:n与lgn