const fs = require('fs-extra'); const path = require('path'); const uppercamelize = require('uppercamelcase'); const Components = require('./get-components')(); const packageJson = require('../package.json'); const version = process.env.VERSION || packageJson.version; const tips = `/* eslint-disable */ // This file is auto gererated by build/build-entry.js`; function buildVantEntry() { const uninstallComponents = [ 'Locale', 'Lazyload', 'Waterfall' ]; const importList = Components.map(name => `import ${uppercamelize(name)} from './${name}';`); const exportList = Components.map(name => `${uppercamelize(name)}`); const intallList = exportList.filter(name => !~uninstallComponents.indexOf(uppercamelize(name))); const content = `${tips} import { VueConstructor } from 'vue/types'; ${importList.join('\n')} declare global { interface Window { Vue?: VueConstructor; } } const version = '${version}'; const components = [ ${intallList.join(',\n ')} ]; const install = (Vue: VueConstructor) => { components.forEach(Component => { Vue.use(Component); }); }; /* istanbul ignore if */ if (typeof window !== 'undefined' && window.Vue) { install(window.Vue); } export { install, version, ${exportList.join(',\n ')} }; export default { install, version }; `; fs.writeFileSync(path.join(__dirname, '../packages/index.ts'), content); } function buildDemoEntry() { const dir = path.join(__dirname, '../packages'); const demos = fs.readdirSync(dir) .filter(name => fs.existsSync(path.join(dir, `${name}/demo/index.vue`))) .map(name => `'${name}': () => wrapper(import('../../packages/${name}/demo'), '${name}')`); const content = `${tips} import { wrapper } from './demo-common'; export default { ${demos.join(',\n ')} }; `; fs.writeFileSync(path.join(dir, '../docs/src/demo-entry.js'), content); } buildVantEntry(); buildDemoEntry();