2016-07-27 06:15:02 +00:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
console.log();
|
|
|
|
process.on('exit', () => {
|
|
|
|
console.log();
|
|
|
|
});
|
|
|
|
|
|
|
|
if (!process.argv[2]) {
|
2017-04-10 13:27:39 +00:00
|
|
|
console.error('[组件名]必填 - Please enter new component name');
|
2016-07-27 06:15:02 +00:00
|
|
|
process.exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
const path = require('path');
|
2019-05-17 09:43:06 +00:00
|
|
|
const fs = require('fs');
|
2016-07-27 06:15:02 +00:00
|
|
|
const fileSave = require('file-save');
|
|
|
|
const uppercamelcase = require('uppercamelcase');
|
|
|
|
const componentname = process.argv[2];
|
|
|
|
const chineseName = process.argv[3] || componentname;
|
|
|
|
const ComponentName = uppercamelcase(componentname);
|
2016-10-13 09:51:14 +00:00
|
|
|
const PackagePath = path.resolve(__dirname, '../../packages', componentname);
|
2016-07-27 06:15:02 +00:00
|
|
|
const Files = [
|
|
|
|
{
|
|
|
|
filename: 'index.js',
|
2016-11-09 05:49:12 +00:00
|
|
|
content: `import ${ComponentName} from './src/main';
|
2016-07-27 06:15:02 +00:00
|
|
|
|
2016-10-30 05:37:32 +00:00
|
|
|
/* istanbul ignore next */
|
2016-07-27 06:15:02 +00:00
|
|
|
${ComponentName}.install = function(Vue) {
|
|
|
|
Vue.component(${ComponentName}.name, ${ComponentName});
|
|
|
|
};
|
|
|
|
|
2016-11-09 05:49:12 +00:00
|
|
|
export default ${ComponentName};`
|
2016-07-27 06:15:02 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
filename: 'src/main.vue',
|
|
|
|
content: `<template>
|
|
|
|
<div class="el-${componentname}"></div>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
export default {
|
2016-12-20 06:43:59 +00:00
|
|
|
name: 'El${ComponentName}'
|
2016-07-27 06:15:02 +00:00
|
|
|
};
|
|
|
|
</script>`
|
|
|
|
},
|
|
|
|
{
|
2016-11-07 08:54:20 +00:00
|
|
|
filename: path.join('../../examples/docs/zh-CN', `${componentname}.md`),
|
2017-04-28 08:15:49 +00:00
|
|
|
content: `## ${ComponentName} ${chineseName}`
|
2016-11-09 05:49:12 +00:00
|
|
|
},
|
2016-11-10 13:46:55 +00:00
|
|
|
{
|
2017-03-20 02:08:13 +00:00
|
|
|
filename: path.join('../../examples/docs/en-US', `${componentname}.md`),
|
2017-04-28 08:15:49 +00:00
|
|
|
content: `## ${ComponentName}`
|
2016-11-10 13:46:55 +00:00
|
|
|
},
|
2018-07-24 05:51:48 +00:00
|
|
|
{
|
|
|
|
filename: path.join('../../examples/docs/es', `${componentname}.md`),
|
|
|
|
content: `## ${ComponentName}`
|
|
|
|
},
|
2019-04-01 07:00:52 +00:00
|
|
|
{
|
|
|
|
filename: path.join('../../examples/docs/fr-FR', `${componentname}.md`),
|
|
|
|
content: `## ${ComponentName}`
|
|
|
|
},
|
2016-11-09 05:49:12 +00:00
|
|
|
{
|
|
|
|
filename: path.join('../../test/unit/specs', `${componentname}.spec.js`),
|
|
|
|
content: `import { createTest, destroyVM } from '../util';
|
2016-12-20 06:43:59 +00:00
|
|
|
import ${ComponentName} from 'packages/${componentname}';
|
2016-11-09 05:49:12 +00:00
|
|
|
|
2016-12-20 06:43:59 +00:00
|
|
|
describe('${ComponentName}', () => {
|
2016-11-09 05:49:12 +00:00
|
|
|
let vm;
|
|
|
|
afterEach(() => {
|
|
|
|
destroyVM(vm);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('create', () => {
|
2016-12-20 06:43:59 +00:00
|
|
|
vm = createTest(${ComponentName}, true);
|
2016-11-09 05:49:12 +00:00
|
|
|
expect(vm.$el).to.exist;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
`
|
2018-06-19 05:17:47 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
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 {
|
|
|
|
}`
|
2016-07-27 06:15:02 +00:00
|
|
|
}
|
2016-09-09 03:51:28 +00:00
|
|
|
];
|
2016-07-27 06:15:02 +00:00
|
|
|
|
|
|
|
// 添加到 components.json
|
2016-09-26 11:01:53 +00:00
|
|
|
const componentsFile = require('../../components.json');
|
2016-07-27 06:15:02 +00:00
|
|
|
if (componentsFile[componentname]) {
|
|
|
|
console.error(`${componentname} 已存在.`);
|
|
|
|
process.exit(1);
|
|
|
|
}
|
2016-09-27 06:55:37 +00:00
|
|
|
componentsFile[componentname] = `./packages/${componentname}/index.js`;
|
2016-09-26 11:01:53 +00:00
|
|
|
fileSave(path.join(__dirname, '../../components.json'))
|
2016-07-27 06:15:02 +00:00
|
|
|
.write(JSON.stringify(componentsFile, null, ' '), 'utf8')
|
2016-09-09 03:51:28 +00:00
|
|
|
.end('\n');
|
2016-07-27 06:15:02 +00:00
|
|
|
|
2019-05-17 09:43:06 +00:00
|
|
|
// 添加到 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');
|
|
|
|
|
2016-07-27 06:15:02 +00:00
|
|
|
// 创建 package
|
|
|
|
Files.forEach(file => {
|
|
|
|
fileSave(path.join(PackagePath, file.filename))
|
2018-01-05 08:53:02 +00:00
|
|
|
.write(file.content, 'utf8')
|
|
|
|
.end('\n');
|
2016-09-09 03:51:28 +00:00
|
|
|
});
|
2016-07-27 06:15:02 +00:00
|
|
|
|
|
|
|
// 添加到 nav.config.json
|
2016-09-26 11:01:53 +00:00
|
|
|
const navConfigFile = require('../../examples/nav.config.json');
|
2016-10-17 07:55:12 +00:00
|
|
|
|
2016-11-10 13:46:55 +00:00
|
|
|
Object.keys(navConfigFile).forEach(lang => {
|
2017-12-26 09:14:28 +00:00
|
|
|
let groups = navConfigFile[lang][4].groups;
|
2016-11-10 13:46:55 +00:00
|
|
|
groups[groups.length - 1].list.push({
|
|
|
|
path: `/${componentname}`,
|
|
|
|
title: lang === 'zh-CN' && componentname !== chineseName
|
2018-01-05 08:53:02 +00:00
|
|
|
? `${ComponentName} ${chineseName}`
|
|
|
|
: ComponentName
|
2016-11-10 13:46:55 +00:00
|
|
|
});
|
2016-07-27 06:15:02 +00:00
|
|
|
});
|
|
|
|
|
2016-09-26 11:01:53 +00:00
|
|
|
fileSave(path.join(__dirname, '../../examples/nav.config.json'))
|
2016-07-27 06:15:02 +00:00
|
|
|
.write(JSON.stringify(navConfigFile, null, ' '), 'utf8')
|
2016-09-09 03:51:28 +00:00
|
|
|
.end('\n');
|
2016-07-27 06:15:02 +00:00
|
|
|
|
|
|
|
console.log('DONE!');
|