quasar
204 строки · 4.5 Кб
1const path = require('path')2const fs = require('fs')3const fse = require('fs-extra')4const rollup = require('rollup')5const uglify = require('uglify-es')6const buble = require('@rollup/plugin-buble')7const json = require('@rollup/plugin-json')8const { nodeResolve } = require('@rollup/plugin-node-resolve')9
10const buildConf = require('./config')11const buildUtils = require('./utils')12
13const rollupPlugins = [14nodeResolve({15extensions: ['.js'],16preferBuiltins: false17}),18json(),19buble({20objectAssign: 'Object.assign'21})22]
23
24const builds = [25{26rollup: {27input: {28input: pathResolve('entry/index.esm.js')29},30output: {31file: pathResolve('../dist/index.esm.js'),32format: 'es'33}34},35build: {36// unminified: true,37minified: true38}39},40{41rollup: {42input: {43input: pathResolve('entry/index.common.js')44},45output: {46file: pathResolve('../dist/index.common.js'),47format: 'cjs'48}49},50build: {51// unminified: true,52minified: true53}54},55{56rollup: {57input: {58input: pathResolve('entry/index.umd.js')59},60output: {61name: '<%= umdExportName %>',62file: pathResolve('../dist/index.umd.js'),63format: 'umd'64}65},66build: {67unminified: true,68minified: true,69minExt: true70}71}72]
73
74// Add your asset folders here, if needed
75// addAssets(builds, 'icon-set', 'iconSet')
76// addAssets(builds, 'lang', 'lang')
77
78build(builds)79
80/**
81* Helpers
82*/
83
84function pathResolve (_path) {85return path.resolve(__dirname, _path)86}
87
88// eslint-disable-next-line no-unused-vars
89function addAssets (builds, type, injectName) {90const91files = fs.readdirSync(pathResolve('../../ui/src/components/' + type)),92plugins = [ buble(/* bubleConfig */) ],93outputDir = pathResolve(`../dist/${type}`)94
95fse.mkdirp(outputDir)96
97files
98.filter(file => file.endsWith('.js'))99.forEach(file => {100const name = file.substr(0, file.length - 3).replace(/-([a-z])/g, g => g[1].toUpperCase())101builds.push({102rollup: {103input: {104input: pathResolve(`../src/components/${type}/${file}`),105plugins
106},107output: {108file: addExtension(pathResolve(`../dist/${type}/${file}`), 'umd'),109format: 'umd',110name: `<%= umdExportName %>.${injectName}.${name}`111}112},113build: {114minified: true115}116})117})118}
119
120function build (builds) {121return Promise122.all(builds.map(genConfig).map(buildEntry))123.catch(buildUtils.logError)124}
125
126function genConfig (opts) {127Object.assign(opts.rollup.input, {128plugins: rollupPlugins,129external: [ 'vue', 'quasar' ]130})131
132Object.assign(opts.rollup.output, {133banner: buildConf.banner,134globals: { vue: 'Vue', quasar: 'Quasar' }135})136
137return opts138}
139
140function addExtension (filename, ext = 'min') {141const insertionPoint = filename.lastIndexOf('.')142return `${filename.slice(0, insertionPoint)}.${ext}${filename.slice(insertionPoint)}`143}
144
145function buildEntry (config) {146return rollup147.rollup(config.rollup.input)148.then(bundle => bundle.generate(config.rollup.output))149.then(({ output }) => {150const code = config.rollup.output.format === 'umd'151? injectVueRequirement(output[0].code)152: output[0].code153
154return config.build.unminified155? buildUtils.writeFile(config.rollup.output.file, code)156: code157})158.then(code => {159if (!config.build.minified) {160return code161}162
163const minified = uglify.minify(code, {164compress: {165pure_funcs: ['makeMap']166}167})168
169if (minified.error) {170return Promise.reject(minified.error)171}172
173return buildUtils.writeFile(174config.build.minExt === true175? addExtension(config.rollup.output.file)176: config.rollup.output.file,177buildConf.banner + minified.code,178true179)180})181.catch(err => {182console.error(err)183process.exit(1)184})185}
186
187function injectVueRequirement (code) {188// eslint-disable-next-line189const index = code.indexOf(`Vue = Vue && Vue.hasOwnProperty('default') ? Vue['default'] : Vue`)190
191if (index === -1) {192return code193}194
195const checkMe = ` if (Vue === void 0) {196console.error('[ Quasar ] Vue is required to run. Please add a script tag for it before loading Quasar.')
197return
198}
199`200
201return code.substring(0, index - 1) +202checkMe +203code.substring(index)204}
205