const fs = require('fs-extra'); const path = require('path'); const Service = require('@vue/cli-service/lib/Service'); const service = new Service(process.env.VUE_CLI_CONTEXT || process.cwd()); const _file = require("@babel/cli/lib/babel/file"); function buildComponent(folder, file, name) { service.run('build', { _: ['build', 'src/components/' + folder + '/' + file, 'build'], modern: false, report: false, 'report-json': false, 'inline-vue': false, watch: false, open: false, copy: true, https: false, verbose: false, target: 'lib', clean: false, name: name, dest: 'dist/' + folder }, [ 'build', 'src/components/' + folder + '/' + file, 'build', '--target', 'lib', '--no-clean', '--name', name, '--dest', 'dist/' + folder ]); } function transpileJS(folder, file) { var options = { babelOptions: { configFile: './.babelrc-lib' }, cliOptions: { filename: undefined, filenames: ['src/components/' + folder + '/' + file], extensions: undefined, keepFileExtension: undefined, outFileExtension: undefined, watch: undefined, skipInitialBuild: undefined, outFile: 'dist/' + folder + '/' + file, outDir: undefined, relative: undefined, copyFiles: undefined, copyIgnored: undefined, includeDotfiles: undefined, verbose: undefined, quiet: undefined, deleteDirOnStart: undefined, sourceMapTarget: undefined } } _file.default(options).catch(err => { console.error(err); process.exitCode = 1; }); } function blue(str) { return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'; } function green(str) { return '\x1b[1m\x1b[32m' + str + '\x1b[39m\x1b[22m'; } fs.readdirSync(path.resolve(__dirname, './src/components/')).forEach(folder => { fs.readdirSync(path.resolve(__dirname, './src/components/' + folder)).forEach(file => { if (!(/\.js$/.test(file)) || file === 'index.js') { fs.copySync(path.resolve(__dirname, './src/components/' + folder) + '/' + file, 'dist/' + folder + '/' + file); } }); }); fs.readdirSync(path.resolve(__dirname, './src/components/')).forEach(folder => { fs.readdirSync(path.resolve(__dirname, './src/components/' + folder)).forEach(file => { if (file !== 'index.js' && file !== 'index.d.ts') { let name = file.split(/(.vue)$|(.js)$/)[0].toLowerCase(); if (/\.js$/.test(file)) { console.log('Transpiling ' + blue(file)); buildComponent(folder, file, name); transpileJS(folder, file); } else if (/\.vue$/.test(file)) { console.log('Building ' + green(name)); buildComponent(folder, file, name); } } }); }); fs.copySync(path.resolve(__dirname, './package-build.json'), 'dist/package.json'); fs.copySync(path.resolve(__dirname, './README.md'), 'dist/README.md'); fs.copySync(path.resolve(__dirname, './LICENSE.md'), 'dist/LICENSE.md');