
Research
/Security News
9 Malicious NuGet Packages Deliver Time-Delayed Destructive Payloads
Socket researchers discovered nine malicious NuGet packages that use time-delayed payloads to crash applications and corrupt industrial control systems.
@ks-dilu/cli-template-micro-base
Advanced tools
├── template //模板目录,你需要将你的模板添加到这个目录下;
└── src
└── index.tsx // 模板处理器
├── debug.js // 调试入口
template 目录下存放你的模板目录或文件,文件支持 ejs 的语法,ejs的变量通过模板处理器注入;
推荐使用inquirer自定义命令交互, 详细说明inquirer
如何将命令行中用户的输入注入到模板中,可以在 src/index.tsx 中的 initTemplateVars 实现, initTemplateVars的返回值将自动注入到模板中;
import inquirer from "inquirer";
import { TemplateBase, TemplateCopyHandler } from "@ks-dilu/cli";
export class Template extends TemplateBase {
constructor(source: string) {
super(source);
}
/**
* 如果需要通过命令行问答方式向模板需要注入一些数据,可以在initTemplateVars中定义;
* 推荐使用inquirer
* @returns {}
*/
async initTemplateVars(): Promise<Record<any, any>> {
const scaffoldType = "master";
const answer = await inquirer.prompt([
{
name: "name",
type: "input",
message: `模板名称(格式:dilu-${scaffoldType}-{name})`,
validate(input) {
let nameRegExp: RegExp = new RegExp(`^dilu-${scaffoldType}`);
if (!nameRegExp.test(input)) {
return `必须符合格式要求:dilu-${scaffoldType}-{name}`;
}
return true;
},
},
{
name: "description",
type: "input",
message: `描述(description)`,
validate(input) {
if (!_.trim(input)) {
return "必填项";
}
return true;
},
},
]);
return { ...answer, scaffoldType };
}
/**
* 定义如何生成模板,如果需要可以使用该方法,否则忽略就可以
* 建议使用提供的this.write方法定制如何复制template;
*/
// getTemplateCopyHandler(): TemplateCopyHandler {
// return (dest: string, vars: Record<any, any>) => {};
// }
}
dilu 默认会将 template 目录中的所有文件复制到当前目录/{projectName}下,但是空目录会被忽略;
通过getTemplateCopyHandler自定义逻辑;
import inquirer from "inquirer";
import { TemplateBase, TemplateCopyHandler } from "@ks-dilu/cli";
export class Template extends TemplateBase {
constructor(source: string) {
super(source);
}
/**
* 如果需要通过命令行问答方式向模板需要注入一些数据,可以在initTemplateVars中定义;
* 推荐使用inquirer
* @returns {}
*/
async initTemplateVars(): Promise<Record<any, any>> {
return {};
}
/**
* 第一种,直接返回一个函数
* 建议使用提供的this.write方法定制如何复制template;
*/
getTemplateCopyHandler(): TemplateCopyHandler {
return (dest: string, vars: Record<any, any>) => {
this.write(
{
glob: "**/xx",
options: {
cwd: this.source,
cwdbase: true,
dot: true,
},
},
dest,
vars
);
};
}
/**
* 第二种,返回对象,分类定制模板拷贝逻辑
*/
getTemplateCopyHandler(): TemplateCopyHandler {
return {
default: async (dest: string, vars) => {
this.write(
{
glob: "**",
options: {
cwd: this.source,
cwdbase: true,
dot: true,
},
},
dest,
vars
);
},
createTemplateDir: async (dest: string, vars: Record<any, any>) => {
await mkdirp(path.join(dest, "template"));
log.success(chalk.green(` create ${vars.name}/template`));
},
};
}
}
第一步:
npm run dev
第二步:
cd demo
npm install
剩下的既可以按照你设计模板,确定模版是否正确了
模板开发完成后,必须发布 @ks-dilu/cli-template-micro-{xxx} 或 @ks-dilu/cli-template-master-{xxx};
第一步:安装@ks-dilu/cli, 如有可以跳过
npm install -g @ks-dilu/cli
第二步:安装你的模板,eg: @ks-dilu/cli-template-micro-test
npm install -g @ks-dilu/cli-template-micro-test
第三步:运行 dilu
dilu create
根据提示即可完成;
| 参数 | 类型 | 描述 |
|---|---|---|
| gloConfig | IGlob | vinyl-fs 的参数配置 |
| dest | string | 目标目录 |
| vars | object | 模板中的变量 |
this.write(
{
glob: "**/xx",
options: {
cwd: this.source,
cwdbase: true,
dot: true,
},
},
dest: "./demo",
vars: {
name: 'kwai'
}
);
模板中的 ejs 标签必现成对出现,否则会运行报错,提示Could not find matching close tag for "xx".
FAQs
的卢微前端基础React子应用模板
We found that @ks-dilu/cli-template-micro-base demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
Socket researchers discovered nine malicious NuGet packages that use time-delayed payloads to crash applications and corrupt industrial control systems.

Security News
Socket CTO Ahmad Nassri discusses why supply chain attacks now target developer machines and what AI means for the future of enterprise security.

Security News
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.