From 9798e1007ef934e35e0da0e3d7e09ccd7c98a8f8 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Fri, 4 Mar 2016 09:36:46 -0600 Subject: [PATCH] Introducing gulp. --- .travis.yml | 2 + README.md | 15 +++++--- gulpfile.js | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++ make.js | 22 ++--------- package.json | 4 +- 5 files changed, 121 insertions(+), 25 deletions(-) create mode 100644 gulpfile.js diff --git a/.travis.yml b/.travis.yml index 796d98f9e7c94..907c45e61a679 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,5 @@ language: node_js node_js: - "0.12" +before_install: + - npm install -g gulp-cli diff --git a/README.md b/README.md index 7f50b87b5c9f5..15811c7c1791e 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ PDF.js is built into version 19+ of Firefox, however the extension is still avai + The official extension for Chrome can be installed from the [Chrome Web Store](https://chrome.google.com/webstore/detail/pdf-viewer/oemmndcbldboiebfnladdacbdfmadadm). *This extension is maintained by [@Rob--W](https://github.com/Rob--W).* -+ Build Your Own - Get the code as explained below and issue `node make chromium`. Then open ++ Build Your Own - Get the code as explained below and issue `gulp chromium`. Then open Chrome, go to `Tools > Extension` and load the (unpackaged) extension from the directory `build/chromium`. @@ -51,16 +51,19 @@ To get a local copy of the current code, clone it using git: $ cd pdf.js Next, install Node.js via the [official package](http://nodejs.org) or via -[nvm](https://github.com/creationix/nvm). If everything worked out, run +[nvm](https://github.com/creationix/nvm). You need to install the gulp package +globally (see also [gulp's getting started](https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md#getting-started)): - $ npm install + $ npm install -g gulp-cli + +If everything worked out, install all dependencies for PDF.js: -to install all dependencies for PDF.js. + $ npm install Finally you need to start a local web server as some browsers do not allow opening PDF files using a file:// URL. Run - $ node make server + $ gulp server and then you can open @@ -75,7 +78,7 @@ It is also possible to view all test PDF files on the right side by opening In order to bundle all `src/` files into two productions scripts and build the generic viewer, issue: - $ node make generic + $ gulp generic This will generate `pdf.js` and `pdf.worker.js` in the `build/generic/build/` directory. Both scripts are needed but only `pdf.js` needs to be included since `pdf.worker.js` will diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000000000..623be57f2e4ef --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,103 @@ +/* Copyright 2016 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* jshint node:true */ +/* globals target */ + +'use strict'; + +var gulp = require('gulp'); +var gutil = require('gulp-util'); +var stream = require('stream'); + +require('./make.js'); + +function createStringSource(filename, content) { + var source = stream.Readable({ objectMode: true }); + source._read = function () { + this.push(new gutil.File({ + cwd: '', + base: '', + path: filename, + contents: new Buffer(content) + })); + this.push(null); + }; + return source; +} + +gulp.task('default', function() { + console.log('Available tasks:'); + var tasks = Object.keys(gulp.tasks); + tasks.sort(); + tasks.forEach(function (taskName) { + console.log(' ' + taskName); + }); +}); + +gulp.task('server', function () { + console.log(); + console.log('### Starting local server'); + + var WebServer = require('./test/webserver.js').WebServer; + var server = new WebServer(); + server.port = 8888; + server.start(); +}); + +gulp.task('makefile', function () { + var makefileContent = 'help:\n\tgulp\n\n'; + var targetsNames = []; + for (var i in target) { + makefileContent += i + ':\n\tgulp ' + i + '\n\n'; + targetsNames.push(i); + } + makefileContent += '.PHONY: ' + targetsNames.join(' ') + '\n'; + return createStringSource('Makefile', makefileContent) + .pipe(gulp.dest('.')); +}); + +// Getting all shelljs registered tasks and register them with gulp +var gulpContext = false; +for (var taskName in global.target) { + if (taskName in gulp.tasks) { + continue; + } + + var task = (function (shellJsTask) { + return function () { + gulpContext = true; + try { + shellJsTask.call(global.target); + } finally { + gulpContext = false; + } + }; + })(global.target[taskName]); + gulp.task(taskName, task); +} + +Object.keys(gulp.tasks).forEach(function (taskName) { + var oldTask = global.target[taskName] || function () { + gulp.run(taskName); + }; + + global.target[taskName] = function () { + // The require('shelljs/make') import in make.js will try to execute tasks + // listed in arguments, guarding with gulpContext + if (gulpContext) { + oldTask.call(global.target); + } + }; +}); diff --git a/make.js b/make.js index 050a798129ecb..6449e2f85276b 100644 --- a/make.js +++ b/make.js @@ -1477,15 +1477,8 @@ target.mozcentralcheck = function() { // // make server // -target.server = function() { - cd(ROOT_DIR); - echo(); - echo('### Starting local server'); - - var WebServer = require('./test/webserver.js').WebServer; - var server = new WebServer(); - server.port = 8888; - server.start(); +target.server = function () { + exit(exec('gulp server')); }; // @@ -1529,15 +1522,8 @@ target.clean = function() { // // make makefile // -target.makefile = function() { - var makefileContent = 'help:\n\tnode make\n\n'; - var targetsNames = []; - for (var i in target) { - makefileContent += i + ':\n\tnode make ' + i + '\n\n'; - targetsNames.push(i); - } - makefileContent += '.PHONY: ' + targetsNames.join(' ') + '\n'; - makefileContent.to('Makefile'); +target.makefile = function () { + exit(exec('gulp makefile')); }; // diff --git a/package.json b/package.json index ada1163a052de..c2d9e31bfdc72 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,8 @@ "name": "pdf.js", "version": "0.8.0", "devDependencies": { + "gulp": "^3.9.1", + "gulp-util": "^3.0.7", "jsdoc": "^3.3.0-alpha9", "jshint": "~2.8.0", "node-ensure": "^0.0.0", @@ -14,7 +16,7 @@ "yargs": "^3.14.0" }, "scripts": { - "test": "node make lint" + "test": "gulp lint" }, "repository": { "type": "git",