Skip to content

Commit 8047853

Browse files
Use rollupjs for bundling jspdf, plugins and libs
1 parent 00e8d92 commit 8047853

File tree

3 files changed

+98
-58
lines changed

3 files changed

+98
-58
lines changed

build.js

Lines changed: 64 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,80 @@
11
var fs = require('fs');
2+
var rollup = require('rollup');
23
var uglify = require('uglify-js');
34
var execSync = require('child_process').execSync;
45

5-
var paths = {
6-
adler: 'node_modules/adler32cs/adler32cs.js',
7-
fileSaver: 'node_modules/filesaver.js/FileSaver.js',
8-
adlerTmp: 'adler.tmp.js',
9-
fileSaverTmp: 'filesaver.tmp.js',
6+
bundle({
107
minified: 'dist/jspdf.min.js',
118
debug: 'dist/jspdf.debug.js'
12-
};
13-
14-
var libs = [
15-
'node_modules/cf-blob.js/Blob.js',
16-
paths.fileSaverTmp,
17-
paths.adlerTmp,
18-
'libs/css_colors.js',
19-
'libs/deflate.js',
20-
'libs/html2canvas/dist/html2canvas.js',
21-
'libs/png_support/png.js',
22-
'libs/png_support/zlib.js',
23-
'libs/polyfill.js'
24-
];
25-
var files = execSync('find plugins/*.js').toString().trim().split(/\n/);
26-
files.unshift('jspdf.js');
27-
28-
monkeyPatch();
29-
bundle();
30-
31-
fs.unlink(paths.adlerTmp);
32-
fs.unlink(paths.fileSaverTmp);
9+
});
3310

3411
// Monkey patching adler32 and filesaver
3512
function monkeyPatch() {
36-
var adler = fs.readFileSync(paths.adler).toString();
37-
adler = adler.replace(/this, function/g, 'jsPDF, function');
38-
adler = adler.replace(/typeof define/g, '0');
39-
fs.writeFileSync(paths.adlerTmp, adler);
13+
return {
14+
transform: function (code, id) {
15+
var file = id.split('/').pop();
16+
if (file === 'adler32cs.js') {
17+
code = code.replace(/this, function/g, 'jsPDF, function');
18+
code = code.replace(/typeof define/g, '0');
19+
} else if (file === 'FileSaver.js') {
20+
code = code.replace(/define !== null\) && \(define.amd != null/g, '0');
21+
}
22+
return code;
23+
}
24+
}
25+
}
26+
27+
// Rollup removes local variables unless used within a module.
28+
// This plugin makes sure specified local variables are preserved
29+
// and kept local. This plugin won't be necessary once es2015
30+
// modules are used.
31+
function rawjs(opts) {
32+
opts = opts || {};
33+
return {
34+
transform: function (code, id) {
35+
var variable = opts[id.split('/').pop()];
36+
if (!variable) return code;
4037

41-
var fileSaverCode = fs.readFileSync(paths.fileSaver).toString();
42-
fileSaverCode = fileSaverCode.replace(/define !== null\) && \(define.amd != null/g, '0');
43-
fs.writeFileSync(paths.fileSaverTmp, fileSaverCode);
38+
var keepStr = '/*rollup-keeper-start*/window.tmp=' + variable + ';/*rollup-keeper-end*/';
39+
return code + keepStr;
40+
},
41+
transformBundle: function (code) {
42+
for (var file in opts) {
43+
var r = new RegExp(opts[file] + '\\$\\d+', 'g');
44+
code = code.replace(r, opts[file]);
45+
}
46+
var re = /\/\*rollup-keeper-start\*\/.*\/\*rollup-keeper-end\*\//g;
47+
return code.replace(re, '');
48+
}
49+
}
4450
}
4551

46-
function bundle() {
47-
var debug = execSync('cat ' + files.join(' ') + ' ' + libs.join(' ')).toString().trim();
48-
fs.writeFileSync(paths.debug, renew(debug));
52+
function bundle(paths) {
53+
rollup.rollup({
54+
entry: './libs/main.js',
55+
plugins: [
56+
monkeyPatch(),
57+
rawjs({
58+
'jspdf.js': 'jsPDF',
59+
'filesaver.tmp.js': 'saveAs',
60+
'deflate.js': 'Deflater',
61+
'zlib.js': 'FlateStream',
62+
'css_colors.js': 'CssColors',
63+
'html2pdf.js': 'html2pdf'
64+
})
65+
]
66+
}).then(function (bundle) {
67+
var code = bundle.generate({format: 'umd'}).code;
68+
code = code.replace(/'use strict';/, '');
69+
code = code.replace(/Permission\s+is\s+hereby\s+granted[\S\s]+?IN\s+THE\s+SOFTWARE\./, 'Licensed under the MIT License');
70+
code = code.replace(/Permission\s+is\s+hereby\s+granted[\S\s]+?IN\s+THE\s+SOFTWARE\./g, '');
71+
fs.writeFileSync(paths.debug, renew(code));
4972

50-
var licences = extractLicences();
51-
var minifed = uglify.minify(files.concat(libs), {wrap: 'jspdf-exports'});
52-
fs.writeFileSync(paths.minified, renew('' + licences + minifed.code));
73+
var minified = uglify.minify(code, {fromString: true, output: {comments: /@preserve|@license|copyright/i}});
74+
fs.writeFileSync(paths.minified, renew(minified.code));
75+
}).catch(function (err) {
76+
console.error(err);
77+
});
5378
}
5479

5580
function renew(code) {
@@ -63,20 +88,4 @@ function renew(code) {
6388
code = code.replace(/1\.0\.0-trunk/, version + ' ' + date + ':' + whoami);
6489

6590
return code;
66-
}
67-
68-
function extractLicences() {
69-
var licences = '';
70-
71-
files.concat(libs).forEach(function(file) {
72-
var commentFilter = " | sed -n -e '1,/\\*\\//p' | sed -e 's/\\s*@preserve/ /' | grep -v *global";
73-
if (file !== 'jspdf.js') {
74-
commentFilter += " | sed -e '/Permission/,/SOFTWARE\\./c \\'";
75-
}
76-
77-
var lic = execSync("awk '/^\\/\\*/,/\\*\\//' " + file + commentFilter).toString();
78-
licences += lic.replace(/^\s*\n/gm, '');
79-
});
80-
81-
return licences;
8291
}

libs/main.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import '../jspdf';
2+
3+
import '../plugins/acroform';
4+
import '../plugins/addhtml';
5+
import '../plugins/addimage';
6+
import '../plugins/annotations';
7+
import '../plugins/autoprint';
8+
import '../plugins/canvas';
9+
import '../plugins/cell';
10+
import '../plugins/context2d';
11+
import '../plugins/from_html';
12+
import '../plugins/javascript';
13+
import '../plugins/outline';
14+
import '../plugins/png_support';
15+
import '../plugins/prevent_scale_to_fit';
16+
import '../plugins/split_text_to_size';
17+
import '../plugins/standard_fonts_metrics';
18+
import '../plugins/svg';
19+
import '../plugins/total_pages';
20+
21+
import '../node_modules/cf-blob.js/Blob.js';
22+
import '../node_modules/filesaver.js/FileSaver.js';
23+
import '../node_modules/adler32cs/adler32cs.js';
24+
import './css_colors.js';
25+
import './deflate.js';
26+
import './html2canvas/dist/html2canvas.js';
27+
import './png_support/png.js';
28+
import './png_support/zlib.js';
29+
import './polyfill.js';

package.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@
1616
"type": "git",
1717
"url": "https://github.com/MrRio/jsPDF.git"
1818
},
19-
"dependencies": {},
20-
"devDependencies": {
19+
"dependencies": {
2120
"adler32cs": "github:chick307/adler32cs.js",
2221
"cf-blob.js": "0.0.1",
23-
"filesaver.js": "github:andyinabox/FileSaver.js",
22+
"filesaver.js": "github:andyinabox/FileSaver.js"
23+
},
24+
"devDependencies": {
2425
"local-web-server": "^0.5.19",
26+
"rollup": "^0.25.4",
2527
"uglify-js": "^2.6.2"
2628
},
2729
"scripts": {

0 commit comments

Comments
 (0)