build-entry.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. var Components = require('../../components.json');
  2. var fs = require('fs');
  3. var render = require('json-templater/string');
  4. var uppercamelcase = require('uppercamelcase');
  5. var path = require('path');
  6. var OUTPUT_PATH = path.join(__dirname, '../../src/index.js');
  7. var IMPORT_TEMPLATE = 'import {{name}} from \'../packages/{{package}}/index.js\';';
  8. var INSTALL_COMPONENT_TEMPLATE = ' Vue.component({{name}}.name, {{name}});';
  9. var MAIN_TEMPLATE = `{{include}}
  10. import locale from 'element-ui/src/locale';
  11. const install = function(Vue, opts = {}) {
  12. /* istanbul ignore if */
  13. if (install.installed) return;
  14. locale.use(opts.locale);
  15. {{install}}
  16. Vue.use(Loading);
  17. Vue.prototype.$msgbox = MessageBox;
  18. Vue.prototype.$alert = MessageBox.alert;
  19. Vue.prototype.$confirm = MessageBox.confirm;
  20. Vue.prototype.$prompt = MessageBox.prompt;
  21. Vue.prototype.$notify = Notification;
  22. Vue.prototype.$message = Message;
  23. };
  24. /* istanbul ignore if */
  25. if (typeof window !== 'undefined' && window.Vue) {
  26. install(window.Vue);
  27. };
  28. module.exports = {
  29. version: '{{version}}',
  30. install,
  31. {{list}}
  32. };
  33. `;
  34. delete Components.font;
  35. var ComponentNames = Object.keys(Components);
  36. var includeComponentTemplate = [];
  37. var installTemplate = [];
  38. var listTemplate = [];
  39. ComponentNames.forEach(name => {
  40. var componentName = uppercamelcase(name);
  41. includeComponentTemplate.push(render(IMPORT_TEMPLATE, {
  42. name: componentName,
  43. package: name
  44. }));
  45. if (['Loading', 'MessageBox', 'Notification', 'Message'].indexOf(componentName) === -1) {
  46. installTemplate.push(render(INSTALL_COMPONENT_TEMPLATE, {
  47. name: componentName,
  48. component: name
  49. }));
  50. }
  51. listTemplate.push(` ${componentName}`);
  52. });
  53. var template = render(MAIN_TEMPLATE, {
  54. include: includeComponentTemplate.join('\n'),
  55. install: installTemplate.join('\n'),
  56. version: process.env.VERSION || require('../../package.json').version,
  57. list: listTemplate.join(',\n')
  58. });
  59. fs.writeFileSync(OUTPUT_PATH, template);
  60. console.log('[build entry] DONE:', OUTPUT_PATH);