mirror of https://github.com/ElemeFE/element
				
				
				
			
		
			
				
	
	
		
			136 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
'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 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: 'cooking.conf.js',
 | 
						|
    content: `var cooking = require('cooking');
 | 
						|
var gen = require('../../build/gen-single-config');
 | 
						|
 | 
						|
cooking.set(gen(__dirname, 'El${ComponentName}'));
 | 
						|
 | 
						|
module.exports = cooking.resolve();
 | 
						|
`
 | 
						|
  },
 | 
						|
  {
 | 
						|
    filename: 'package.json',
 | 
						|
    content: `{
 | 
						|
  "name": "element-${componentname}",
 | 
						|
  "version": "0.0.0",
 | 
						|
  "description": "A ${componentname} component for Vue.js.",
 | 
						|
  "keywords": [
 | 
						|
    "element",
 | 
						|
    "vue",
 | 
						|
    "component"
 | 
						|
  ],
 | 
						|
  "main": "./lib/index.js",
 | 
						|
  "repository": "https://github.com/ElemeFE/element/tree/master/packages/${componentname}",
 | 
						|
  "author": "elemefe",
 | 
						|
  "license": "MIT",
 | 
						|
  "dependencies": {}
 | 
						|
}`
 | 
						|
  },
 | 
						|
  {
 | 
						|
    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('../../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;
 | 
						|
  });
 | 
						|
});
 | 
						|
`
 | 
						|
  }
 | 
						|
];
 | 
						|
 | 
						|
// 添加到 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');
 | 
						|
 | 
						|
// 创建 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][3].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!');
 |