123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- 'use strict';
- console.log();
- process.on('exit', () => {
- console.log();
- });
- if (!process.argv[2]) {
- console.error('[组件名]必填 - Please enter new component name');
- process.exit(1);
- }
- const path = require('path');
- const fs = require('fs');
- const fileSave = require('file-save');
- const uppercamelcase = require('uppercamelcase');
- const componentname = process.argv[2];
- const chineseName = process.argv[3] || componentname;
- const ComponentName = uppercamelcase(componentname);
- const PackagePath = path.resolve(__dirname, '../../packages', componentname);
- const Files = [
- {
- filename: 'index.js',
- content: `import ${ComponentName} from './src/main';
- /* istanbul ignore next */
- ${ComponentName}.install = function(Vue) {
- Vue.component(${ComponentName}.name, ${ComponentName});
- };
- export default ${ComponentName};`
- },
- {
- filename: 'src/main.vue',
- content: `<template>
- <div class="el-${componentname}"></div>
- </template>
- <script>
- export default {
- name: 'El${ComponentName}'
- };
- </script>`
- },
- {
- filename: path.join('../../examples/docs/zh-CN', `${componentname}.md`),
- content: `## ${ComponentName} ${chineseName}`
- },
- {
- filename: path.join('../../examples/docs/en-US', `${componentname}.md`),
- content: `## ${ComponentName}`
- },
- {
- filename: path.join('../../examples/docs/es', `${componentname}.md`),
- content: `## ${ComponentName}`
- },
- {
- filename: path.join('../../examples/docs/fr-FR', `${componentname}.md`),
- content: `## ${ComponentName}`
- },
- {
- filename: path.join('../../test/unit/specs', `${componentname}.spec.js`),
- content: `import { createTest, destroyVM } from '../util';
- import ${ComponentName} from 'packages/${componentname}';
- describe('${ComponentName}', () => {
- let vm;
- afterEach(() => {
- destroyVM(vm);
- });
- it('create', () => {
- vm = createTest(${ComponentName}, true);
- expect(vm.$el).to.exist;
- });
- });
- `
- },
- {
- filename: path.join('../../packages/theme-chalk/src', `${componentname}.scss`),
- content: `@import "mixins/mixins";
- @import "common/var";
- @include b(${componentname}) {
- }`
- },
- {
- filename: path.join('../../types', `${componentname}.d.ts`),
- content: `import { ElementUIComponent } from './component'
- /** ${ComponentName} Component */
- export declare class El${ComponentName} extends ElementUIComponent {
- }`
- }
- ];
- // 添加到 components.json
- const componentsFile = require('../../components.json');
- if (componentsFile[componentname]) {
- console.error(`${componentname} 已存在.`);
- process.exit(1);
- }
- componentsFile[componentname] = `./packages/${componentname}/index.js`;
- fileSave(path.join(__dirname, '../../components.json'))
- .write(JSON.stringify(componentsFile, null, ' '), 'utf8')
- .end('\n');
- // 添加到 index.scss
- const sassPath = path.join(__dirname, '../../packages/theme-chalk/src/index.scss');
- const sassImportText = `${fs.readFileSync(sassPath)}@import "./${componentname}.scss";`;
- fileSave(sassPath)
- .write(sassImportText, 'utf8')
- .end('\n');
- // 添加到 element-ui.d.ts
- const elementTsPath = path.join(__dirname, '../../types/element-ui.d.ts');
- let elementTsText = `${fs.readFileSync(elementTsPath)}
- /** ${ComponentName} Component */
- export class ${ComponentName} extends El${ComponentName} {}`;
- const index = elementTsText.indexOf('export') - 1;
- const importString = `import { El${ComponentName} } from './${componentname}'`;
- elementTsText = elementTsText.slice(0, index) + importString + '\n' + elementTsText.slice(index);
- fileSave(elementTsPath)
- .write(elementTsText, 'utf8')
- .end('\n');
- // 创建 package
- Files.forEach(file => {
- fileSave(path.join(PackagePath, file.filename))
- .write(file.content, 'utf8')
- .end('\n');
- });
- // 添加到 nav.config.json
- const navConfigFile = require('../../examples/nav.config.json');
- Object.keys(navConfigFile).forEach(lang => {
- let groups = navConfigFile[lang][4].groups;
- groups[groups.length - 1].list.push({
- path: `/${componentname}`,
- title: lang === 'zh-CN' && componentname !== chineseName
- ? `${ComponentName} ${chineseName}`
- : ComponentName
- });
- });
- fileSave(path.join(__dirname, '../../examples/nav.config.json'))
- .write(JSON.stringify(navConfigFile, null, ' '), 'utf8')
- .end('\n');
- console.log('DONE!');
|