From 5f621c06a3dc388e1cd4b73ea421bc4673afe62e Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Mon, 2 Oct 2017 21:29:41 +0800 Subject: [PATCH] Add minified js & Use jshint --- .jshintrc | 3 + README.md | 4 +- package-lock.json | 195 +++++++++++++++++++++++++++++++++++++- package.json | 12 ++- rollup.config.babel.js | 27 ------ rollup.config.default.js | 20 ---- src/model.js | 6 +- src/orbit_controls.js | 8 +- src/skinview3d.js | 1 + src/viewer.js | 4 +- tools/rollup.babel.js | 2 + tools/rollup.babel.min.js | 2 + tools/rollup.common.js | 51 ++++++++++ tools/rollup.default.js | 2 + tools/rollup.min.js | 2 + 15 files changed, 275 insertions(+), 64 deletions(-) create mode 100644 .jshintrc delete mode 100644 rollup.config.babel.js delete mode 100644 rollup.config.default.js create mode 100644 tools/rollup.babel.js create mode 100644 tools/rollup.babel.min.js create mode 100644 tools/rollup.common.js create mode 100644 tools/rollup.default.js create mode 100644 tools/rollup.min.js diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..fc024be --- /dev/null +++ b/.jshintrc @@ -0,0 +1,3 @@ +{ + "esversion": 6 +} diff --git a/README.md b/README.md index 8bec94c..9d0ad7e 100644 --- a/README.md +++ b/README.md @@ -49,9 +49,7 @@ Three.js powered Minecraft skin viewer. ``` # Build -`npm run build` Concatenation only. - -`npm run build-babel` Concatenate and compile using Babel (es2015). +`npm run build` [npm-badge]: https://img.shields.io/npm/v/skinview3d.svg diff --git a/package-lock.json b/package-lock.json index 2a9b9f1..046b014 100644 --- a/package-lock.json +++ b/package-lock.json @@ -714,6 +714,16 @@ "readdirp": "2.1.0" } }, + "cli": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", + "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", + "dev": true, + "requires": { + "exit": "0.1.2", + "glob": "7.1.2" + } + }, "commander": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", @@ -726,6 +736,15 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, "convert-source-map": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", @@ -742,8 +761,13 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true, - "optional": true + "dev": true + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true }, "debug": { "version": "2.6.9", @@ -763,6 +787,61 @@ "repeating": "2.0.1" } }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", + "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "entities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", + "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -781,6 +860,12 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", @@ -926,6 +1011,45 @@ "os-tmpdir": "1.0.2" } }, + "htmlparser2": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", + "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.3.0", + "domutils": "1.5.1", + "entities": "1.0.0", + "readable-stream": "1.1.14" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1067,6 +1191,30 @@ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true }, + "jshint": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz", + "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", + "dev": true, + "requires": { + "cli": "1.0.1", + "console-browserify": "1.1.0", + "exit": "0.1.2", + "htmlparser2": "3.8.3", + "lodash": "3.7.0", + "minimatch": "3.0.4", + "shelljs": "0.3.0", + "strip-json-comments": "1.0.4" + }, + "dependencies": { + "lodash": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", + "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=", + "dev": true + } + } + }, "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", @@ -1428,6 +1576,27 @@ "rollup-pluginutils": "1.5.2" } }, + "rollup-plugin-uglify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-2.0.1.tgz", + "integrity": "sha1-Z7N60e/a+9g69MNrQMGJ7khmyWk=", + "dev": true, + "requires": { + "uglify-js": "3.1.3" + }, + "dependencies": { + "uglify-js": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.3.tgz", + "integrity": "sha512-5ZUOgufCHjN2mBBLfz63UtWTP6va2sSzBpNCM+/iqI6RnPzEhANmB0EKiKBYdQbc3v7KeomXJ2DJx0Xq9gvUvA==", + "dev": true, + "requires": { + "commander": "2.11.0", + "source-map": "0.5.7" + } + } + } + }, "rollup-pluginutils": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz", @@ -1451,6 +1620,12 @@ "dev": true, "optional": true }, + "shelljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", + "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", + "dev": true + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -1491,6 +1666,12 @@ "ansi-regex": "2.1.1" } }, + "strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", + "dev": true + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -1514,6 +1695,16 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, + "uglify-es": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.1.3.tgz", + "integrity": "sha512-Nuo5gkv/Q6PmLa+Ui2LvK+87YdMAcuXfRIWF0uVfkHVSfpT3Ue0euCSu4t0b8xv4Bt05lmXUT8bLI9OmnyPj8A==", + "dev": true, + "requires": { + "commander": "2.11.0", + "source-map": "0.5.7" + } + }, "user-home": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", diff --git a/package.json b/package.json index 8a16a42..d618e08 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,9 @@ "description": "Three.js powered Minecraft skin viewer", "main": "src/skinview3d.js", "scripts": { - "build": "./node_modules/.bin/rollup -c rollup.config.default.js", - "build-babel": "./node_modules/.bin/rollup -c rollup.config.babel.js", - "prepare": "rm -rf build && npm run build && npm run build-babel", - "test": "echo \"Error: no test specified\" && exit 1" + "build": "rollup -c tools/rollup.default.js && rollup -c tools/rollup.min.js && rollup -c tools/rollup.babel.js && rollup -c tools/rollup.babel.min.js", + "prepare": "npm test && rm -rf build && npm run build", + "test": "jshint src" }, "repository": { "type": "git", @@ -26,7 +25,10 @@ "babel-cli": "^6.26.0", "babel-plugin-external-helpers": "^6.22.0", "babel-preset-es2015": "^6.24.1", + "jshint": "^2.9.5", "rollup": "^0.50.0", - "rollup-plugin-babel": "^3.0.2" + "rollup-plugin-babel": "^3.0.2", + "rollup-plugin-uglify": "^2.0.1", + "uglify-es": "^3.1.3" } } diff --git a/rollup.config.babel.js b/rollup.config.babel.js deleted file mode 100644 index 17907b9..0000000 --- a/rollup.config.babel.js +++ /dev/null @@ -1,27 +0,0 @@ -import babel from 'rollup-plugin-babel'; - -export default { - input: 'src/skinview3d.js', - indent: '\t', - sourcemap: true, - external: ['three'], - globals: { - three: 'THREE' - }, - output: [ - { - format: 'umd', - name: 'skinview3d', - file: 'build/skinview3d.babel.js' - }, - { - format: 'es', - file: 'build/skinview3d.babel.module.js' - } - ], - plugins: [ - babel({ - exclude: 'node_modules/**', - }), - ] -}; diff --git a/rollup.config.default.js b/rollup.config.default.js deleted file mode 100644 index d7f01d0..0000000 --- a/rollup.config.default.js +++ /dev/null @@ -1,20 +0,0 @@ -export default { - input: 'src/skinview3d.js', - indent: '\t', - sourcemap: true, - external: ['three'], - globals: { - three: 'THREE' - }, - output: [ - { - format: 'umd', - name: 'skinview3d', - file: 'build/skinview3d.js' - }, - { - format: 'es', - file: 'build/skinview3d.module.js' - } - ], -}; diff --git a/src/model.js b/src/model.js index b985581..1350cae 100644 --- a/src/model.js +++ b/src/model.js @@ -287,7 +287,7 @@ class SkinObject extends THREE.Group { this.leftLeg.position.x = 2; this.add(this.leftLeg); } -}; +} class CapeObject extends THREE.Group { constructor(capeMaterial) { @@ -309,7 +309,7 @@ class CapeObject extends THREE.Group { this.cape.position.z = -0.5; this.add(this.cape); } -}; +} class PlayerObject extends THREE.Group { constructor(slim, layer1Material, layer2Material, capeMaterial) { @@ -328,6 +328,6 @@ class PlayerObject extends THREE.Group { this.cape.visible = false; this.add(this.cape); } -}; +} export { SkinObject, CapeObject, PlayerObject }; diff --git a/src/orbit_controls.js b/src/orbit_controls.js index 1cb9076..ea61ae9 100644 --- a/src/orbit_controls.js +++ b/src/orbit_controls.js @@ -1,4 +1,5 @@ /** + * @license * Copyright (C) 2010-2017 three.js authors * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -19,12 +20,15 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -// The code was originally from https://github.com/mrdoob/three.js/blob/d45a042cf962e9b1aa9441810ba118647b48aacb/examples/js/controls/OrbitControls.js - +/** + * @preserve + * The code was originally from https://github.com/mrdoob/three.js/blob/d45a042cf962e9b1aa9441810ba118647b48aacb/examples/js/controls/OrbitControls.js + */ import THREE from "three"; class OrbitControls extends THREE.EventDispatcher { /** + * @preserve * @author qiao / https://github.com/qiao * @author mrdoob / http://mrdoob.com * @author alteredq / http://alteredqualia.com/ diff --git a/src/skinview3d.js b/src/skinview3d.js index c27cedf..c986907 100644 --- a/src/skinview3d.js +++ b/src/skinview3d.js @@ -1,4 +1,5 @@ /** + * @license * skinview3d * * Copyright (C) 2017 the original author or authors diff --git a/src/viewer.js b/src/viewer.js index a6602b9..7cd7cc4 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -213,7 +213,7 @@ class SkinViewer { set height(newHeight) { this.setSize(this.width, newHeight); } -}; +} class SkinControl { constructor(skinViewer) { @@ -240,6 +240,6 @@ class SkinControl { this.skinViewer.domElement.removeEventListener("contextmenu", this.animationPauseListener, false); this.orbitControls.dispose(); } -}; +} export { SkinViewer, SkinControl }; diff --git a/tools/rollup.babel.js b/tools/rollup.babel.js new file mode 100644 index 0000000..3996b27 --- /dev/null +++ b/tools/rollup.babel.js @@ -0,0 +1,2 @@ +import { buildType } from './rollup.common'; +export default buildType({ postfix: '.babel', babel: true, uglify: false }); diff --git a/tools/rollup.babel.min.js b/tools/rollup.babel.min.js new file mode 100644 index 0000000..58caa27 --- /dev/null +++ b/tools/rollup.babel.min.js @@ -0,0 +1,2 @@ +import { buildType } from './rollup.common'; +export default buildType({ postfix: '.babel.min', babel: true, uglify: true }); diff --git a/tools/rollup.common.js b/tools/rollup.common.js new file mode 100644 index 0000000..3a1388b --- /dev/null +++ b/tools/rollup.common.js @@ -0,0 +1,51 @@ +import uglify from 'rollup-plugin-uglify'; +import { minify } from 'uglify-es'; +import babel from 'rollup-plugin-babel'; +let buildType = config => { + let options = { + input: 'src/skinview3d.js', + indent: '\t', + sourcemap: true, + external: ['three'], + globals: { + three: 'THREE' + }, + output: [ + { + format: 'umd', + name: 'skinview3d', + file: `build/skinview3d${config.postfix}.js` + }, + { + format: 'es', + file: `build/skinview3d${config.postfix}.module.js` + } + ], + plugins: [] + }; + if (config.babel) { + options.plugins.push( + babel({ + exclude: 'node_modules/**', + }) + ); + } + if (config.uglify) { + options.plugins.push( + uglify({ + output: { + comments: (node, comment) => { + let text = comment.value; + let type = comment.type; + if (type == "comment2") { + // multiline comment + return /@preserve|@license|@cc_on/i.test(text); + } + } + } + }, minify) + ); + } + return options; +}; +export { buildType }; diff --git a/tools/rollup.default.js b/tools/rollup.default.js new file mode 100644 index 0000000..b080baf --- /dev/null +++ b/tools/rollup.default.js @@ -0,0 +1,2 @@ +import { buildType } from './rollup.common'; +export default buildType({ postfix: '', babel: false, uglify: false }); diff --git a/tools/rollup.min.js b/tools/rollup.min.js new file mode 100644 index 0000000..c55a994 --- /dev/null +++ b/tools/rollup.min.js @@ -0,0 +1,2 @@ +import { buildType } from './rollup.common'; +export default buildType({ postfix: '.min', babel: false, uglify: true });