Skip to content

Commit ed91401

Browse files
committed
feat(bundler): add common bundler config in package
1 parent 208aa1b commit ed91401

File tree

6 files changed

+206
-0
lines changed

6 files changed

+206
-0
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# `@posva/vuefire-bundler`
2+
3+
> TODO: description
4+
5+
## Usage
6+
7+
```
8+
const vuefireBundler = require('@posva/vuefire-bundler');
9+
10+
// TODO: DEMONSTRATE API
11+
```
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"name": "@posva/vuefire-bundler",
3+
"version": "1.0.0",
4+
"description": "wrapper around rollup to bundle vuefire and vuexfire",
5+
"author": "Eduardo San Martin Morote <posva13@gmail.com>",
6+
"homepage": "https://github.com/vuejs/vuefire#readme",
7+
"license": "MIT",
8+
"main": "src/index.js",
9+
"directories": {
10+
"lib": "src"
11+
},
12+
"files": [
13+
"src"
14+
],
15+
"publishConfig": {
16+
"access": "public"
17+
},
18+
"repository": {
19+
"type": "git",
20+
"url": "git+https://github.com/vuejs/vuefire.git"
21+
},
22+
"bugs": {
23+
"url": "https://github.com/vuejs/vuefire/issues"
24+
},
25+
"dependencies": {
26+
"mkdirp": "^0.5.1",
27+
"rollup": "^0.64.1",
28+
"rollup-plugin-buble": "^0.19.2",
29+
"rollup-plugin-node-resolve": "^3.3.0",
30+
"shelljs": "^0.8.2"
31+
},
32+
"devDependencies": {
33+
"eslint": "^5.3.0"
34+
}
35+
}
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
const rollup = require('rollup').rollup
2+
const buble = require('rollup-plugin-buble')
3+
const resolve = require('rollup-plugin-node-resolve')
4+
const uglify = require('uglify-js')
5+
const mkdirp = require('mkdirp')
6+
const { logError, write } = require('./utils')
7+
8+
const { pwd } = require('shelljs')
9+
const { join } = require('path')
10+
11+
const cwd = pwd().toString()
12+
const packageData = require(join(cwd, 'package.json'))
13+
const { version, author, name } = packageData
14+
// remove the email at the end
15+
const authorName = author.name
16+
const moduleName = 'Vuefire'
17+
console.log({ name, author, moduleName })
18+
19+
// Make sure dist dir exists
20+
const distFolder = join(cwd, 'dist')
21+
mkdirp(distFolder)
22+
23+
const bundleOptions = {
24+
exports: 'auto',
25+
format: 'umd',
26+
}
27+
28+
const plugins = [
29+
// replace({
30+
// __VERSION__: version,
31+
// // 'process.env.NODE_ENV': '"development"',
32+
// }),
33+
resolve({
34+
extensions: ['.js', '.vue', '.jsx', '.json'],
35+
}),
36+
buble({
37+
objectAssign: 'Object.assign',
38+
transforms: {
39+
dangerousForOf: true,
40+
},
41+
}),
42+
]
43+
44+
function createBundle({ filename, format, moduleName, banner }) {
45+
rollup({
46+
input: join(cwd, 'src/index.js'),
47+
plugins,
48+
})
49+
.then(bundle => {
50+
const options = Object.assign({ banner, name: moduleName }, bundleOptions)
51+
if (format) options.format = format
52+
return bundle.generate(options)
53+
})
54+
.then(({ code }) => {
55+
if (/min$/.test(filename)) {
56+
const minified = uglify.minify(code, {
57+
output: {
58+
preamble: banner,
59+
ascii_only: true,
60+
},
61+
}).code
62+
return write(`${distFolder}/${filename}.js`, minified)
63+
} else {
64+
return write(`${distFolder}/${filename}.js`, code)
65+
}
66+
})
67+
.catch(logError)
68+
}
69+
70+
module.exports = function run(moduleName) {
71+
const banner =
72+
'/*!\n' +
73+
` * ${name} v${version}\n` +
74+
` * (c) ${new Date().getFullYear()} ${authorName}\n` +
75+
' * Released under the MIT License.\n' +
76+
' */'
77+
78+
// Browser bundle (can be used with script)
79+
createBundle({
80+
banner,
81+
filename: name,
82+
moduleName,
83+
})
84+
85+
// Commonjs bundle (preserves process.env.NODE_ENV) so
86+
// the user can replace it in dev and prod mode
87+
createBundle({
88+
banner,
89+
filename: `${name}.esm`,
90+
format: 'es',
91+
moduleName,
92+
})
93+
94+
createBundle({
95+
banner,
96+
filename: `${name}.common`,
97+
format: 'cjs',
98+
moduleName,
99+
})
100+
101+
// Minified version for browser
102+
createBundle({
103+
banner,
104+
filename: `${name}.min`,
105+
moduleName,
106+
})
107+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const write = require('./write.js')
2+
const { logError } = require('./log.js')
3+
4+
module.exports = {
5+
write,
6+
logError,
7+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
function logError (e) {
2+
console.log(e)
3+
}
4+
5+
function blue (str) {
6+
return `\x1b[1m\x1b[34m${str}\x1b[39m\x1b[22m`
7+
}
8+
9+
function green (str) {
10+
return `\x1b[1m\x1b[32m${str}\x1b[39m\x1b[22m`
11+
}
12+
13+
function red (str) {
14+
return `\x1b[1m\x1b[31m${str}\x1b[39m\x1b[22m`
15+
}
16+
17+
function yellow (str) {
18+
return `\x1b[1m\x1b[33m${str}\x1b[39m\x1b[22m`
19+
}
20+
21+
module.exports = {
22+
blue,
23+
green,
24+
red,
25+
yellow,
26+
logError,
27+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const fs = require('fs')
2+
3+
const { blue } = require('./log.js')
4+
5+
function write(dest, code) {
6+
return new Promise((resolve, reject) => {
7+
fs.writeFile(dest, code, err => {
8+
if (err) return reject(err)
9+
console.log(blue(dest) + ' ' + getSize(code))
10+
resolve(code)
11+
})
12+
})
13+
}
14+
15+
function getSize(code) {
16+
return (code.length / 1024).toFixed(2) + 'kb'
17+
}
18+
19+
module.exports = write

0 commit comments

Comments
 (0)