diff --git a/buildAppJSPlugin.js b/buildAppJSPlugin.js new file mode 100644 index 0000000..794db82 --- /dev/null +++ b/buildAppJSPlugin.js @@ -0,0 +1,86 @@ +const cdnDependencies = require("./dependencies-cdn"); + +// 引入文件的 cdn 链接 +const cdn = { + css: cdnDependencies.map((e) => e.css).filter((e) => e), + js: cdnDependencies.map((e) => e.js).filter((e) => e), +}; + +class BuildAppJSPlugin { + apply(compiler) { + // emit 是异步 hook,使用 tapAsync 触及它,还可以使用 tapPromise/tap(同步) + compiler.hooks.emit.tapAsync( + "BuildAppJSPlugin", + (compilation, callback) => { + let cssarr = []; + let jsarr = []; + // 遍历所有编译过的资源文件, + // 对于每个文件名称,都添加一行内容。 + for (let filename in compilation.assets) { + if (process.env.NODE_ENV === "production") { + filename = (process.env.VUE_APP_PUBLIC_PATH || "/") + filename; + } else { + filename = "/" + filename; + } + // filename = "/" + filename; + + if (filename.match(".*\\.js$")) { + jsarr.push(filename); + } + if (filename.match(".*\\.css$")) { + cssarr.push(filename); + } + } + cssarr = cssarr.sort(function(a) { + return a.indexOf("app."); + }); + var cdnjs = '' + if (process.env.NODE_ENV === "production") { + cssarr = cdn.css.concat(cssarr); + cdnjs = `var cdnjs = ${JSON.stringify(cdn.js)}; + cdnjs.forEach((item) => { + document.write(''); + });` + } else { + cssarr = cssarr.concat(cdnDependencies + .filter((e) => e.name === "") + .map((e) => e.css)); + } + let content = ` + var styles = ${JSON.stringify(cssarr)}; + var scripts = ${JSON.stringify(jsarr)}; + ${cdnjs} + document.write('
'); + var title = document.getElementsByTagName('title') + styles.forEach((item) => { + let link = document.createElement('link'); + link.href=item; + link.rel = 'preload'; + link.as = 'style'; + title[0].parentNode.insertBefore(link,title[0]) + link = document.createElement('link'); + link.href=item; + link.rel = 'stylesheet'; + title[0].parentNode.insertBefore(link,title[0]) + }); + scripts.forEach((item) => { + document.write(''); + }); + `; + // 将这个列表作为一个新的文件资源,插入到 webpack 构建中: + compilation.assets["app.js"] = { + source: function() { + return content; + }, + size: function() { + return cssarr.length + jsarr.length; + }, + }; + + callback(); + } + ); + } +} + +module.exports = BuildAppJSPlugin; diff --git a/dependencies-cdn.js b/dependencies-cdn.js index 200a8d4..d46e4d6 100644 --- a/dependencies-cdn.js +++ b/dependencies-cdn.js @@ -3,6 +3,8 @@ module.exports = [ { name: 'vue-i18n', library: 'VueI18n', js: 'https://cdn.jsdelivr.net/npm/vue-i18n@8.17.3/dist/vue-i18n.min.js', css: '' }, { name: 'vue-router', library: 'VueRouter', js: 'https://cdn.jsdelivr.net/npm/vue-router@3.1.6/dist/vue-router.min.js', css: '' }, { name: 'axios', library: 'axios', js: 'https://cdn.jsdelivr.net/npm/axios@0.19.2/dist/axios.min.js', css: '' }, + // { name: 'element-ui', library: 'ELEMENT', js: 'https://cdn.jsdelivr.net/npm/element-ui@2.13.1/lib/index.js', css: 'https://cdn.jsdelivr.net/npm/element-ui@2.13.1/lib/theme-chalk/index.css' }, + { name: 'js-cookie', library: 'Cookies', js: 'https://cdn.jsdelivr.net/npm/js-cookie@2.2.1/src/js.cookie.min.js', css: '' }, // { name: 'brace', library: 'ace', js: 'https://cdn.jsdelivr.net/npm/brace@0.11.1/index.min.js', css: '' }, // { name: 'brace/ext/language_tools', library: 'language_tools', js: ' https://cdn.jsdelivr.net/npm/brace@0.11.1/ext/language_tools.js', css: '' }, // { name: 'brace/mode/html', library: 'html', js: ' https://cdn.jsdelivr.net/npm/brace@0.11.1/mode/html.js', css: '' }, @@ -15,4 +17,5 @@ module.exports = [ { name: '', library: '', js: '', css: 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css' }, { name: '', library: '', js: '', css: 'https://cdn.jsdelivr.net/npm/font-awesome@latest/css/font-awesome.min.css' }, { name: '', library: '', js: '', css: 'https://cdn.jsdelivr.net/npm/font-awesome-animation@0.2.1/dist/font-awesome-animation.min.css' }, + { name: '', library: '', js: '', css: 'https://cdn.jsdelivr.net/npm/bulma-pageloader@0.3.0/dist/css/bulma-pageloader.min.css' }, ] \ No newline at end of file diff --git a/public/nginx.conf b/nginx/nginx.conf similarity index 100% rename from public/nginx.conf rename to nginx/nginx.conf diff --git a/package-lock.json b/package-lock.json index 0e76542..ca3750b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2143,14 +2143,6 @@ "integrity": "sha1-3TeelPDbgxCwgpH51kwyCXZmF/0=", "dev": true }, - "async-validator": { - "version": "1.8.5", - "resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-1.8.5.tgz", - "integrity": "sha1-3D4I7B/Q3dtn5ghC8CwM0c7G1/A=", - "requires": { - "babel-runtime": "6.x" - } - }, "asynckit": { "version": "0.4.0", "resolved": "http://registry.npm.taobao.org/asynckit/download/asynckit-0.4.0.tgz", @@ -2232,11 +2224,6 @@ "resolve": "^1.12.0" } }, - "babel-helper-vue-jsx-merge-props": { - "version": "2.0.3", - "resolved": "https://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz", - "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY=" - }, "babel-loader": { "version": "8.1.0", "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.1.0.tgz?cache=0&sync_timestamp=1584717315701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-loader%2Fdownload%2Fbabel-loader-8.1.0.tgz", @@ -2291,27 +2278,6 @@ "object.assign": "^4.1.0" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-2.6.11.tgz", - "integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw=" - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz?cache=0&sync_timestamp=1584052392667&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.11.1.tgz", - "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=" - } - } - }, "balanced-match": { "version": "1.0.0", "resolved": "http://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz", @@ -2384,11 +2350,6 @@ "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, - "batch-processor": { - "version": "1.0.0", - "resolved": "https://registry.npm.taobao.org/batch-processor/download/batch-processor-1.0.0.tgz", - "integrity": "sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=" - }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz", @@ -3185,6 +3146,11 @@ "integrity": "sha1-sEM9C06chH7xiGik7xb9X8gnHEg=", "dev": true }, + "clipboard-polyfill": { + "version": "2.8.6", + "resolved": "https://registry.npm.taobao.org/clipboard-polyfill/download/clipboard-polyfill-2.8.6.tgz", + "integrity": "sha1-GdJyg/EfKTO7GHNyY7mLjJW1oPc=" + }, "clipboardy": { "version": "2.3.0", "resolved": "https://registry.npm.taobao.org/clipboardy/download/clipboardy-2.3.0.tgz", @@ -3952,7 +3918,8 @@ "deepmerge": { "version": "1.5.2", "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz", - "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=" + "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=", + "dev": true }, "default-gateway": { "version": "5.0.5", @@ -4404,27 +4371,6 @@ "integrity": "sha1-nQqS3v79p8wc+IlQWLiSeV3da0E=", "dev": true }, - "element-resize-detector": { - "version": "1.2.1", - "resolved": "https://registry.npm.taobao.org/element-resize-detector/download/element-resize-detector-1.2.1.tgz", - "integrity": "sha1-sDBRlER6SGMVXljxMyOgrvMIUdE=", - "requires": { - "batch-processor": "1.0.0" - } - }, - "element-ui": { - "version": "2.13.1", - "resolved": "https://registry.npm.taobao.org/element-ui/download/element-ui-2.13.1.tgz", - "integrity": "sha1-DLGkXPJ6phxgHe++GSdArFy533w=", - "requires": { - "async-validator": "~1.8.1", - "babel-helper-vue-jsx-merge-props": "^2.0.0", - "deepmerge": "^1.2.0", - "normalize-wheel": "^1.0.1", - "resize-observer-polyfill": "^1.5.0", - "throttle-debounce": "^1.0.1" - } - }, "elliptic": { "version": "6.5.2", "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.2.tgz", @@ -7147,33 +7093,6 @@ "resolved": "http://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "iview": { - "version": "3.5.4", - "resolved": "https://registry.npm.taobao.org/iview/download/iview-3.5.4.tgz?cache=0&sync_timestamp=1575428499080&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fiview%2Fdownload%2Fiview-3.5.4.tgz", - "integrity": "sha1-1Ra5LnO2F/Lcf0WDH5kFnWmTL4I=", - "requires": { - "async-validator": "^1.12.2", - "deepmerge": "^2.2.1", - "element-resize-detector": "^1.2.0", - "js-calendar": "^1.2.3", - "lodash.throttle": "^4.1.1", - "popper.js": "^1.14.6", - "tinycolor2": "^1.4.1", - "v-click-outside-x": "^4.0.19" - }, - "dependencies": { - "async-validator": { - "version": "1.12.2", - "resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-1.12.2.tgz", - "integrity": "sha1-vq5nHnF00pOLe0tp0vt+cit/1yw=" - }, - "deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-2.2.1.tgz", - "integrity": "sha1-XT/yKgHAD2RUBaL7wX0HeKGAEXA=" - } - } - }, "javascript-stringify": { "version": "2.0.1", "resolved": "https://registry.npm.taobao.org/javascript-stringify/download/javascript-stringify-2.0.1.tgz", @@ -7212,11 +7131,6 @@ "resolved": "https://registry.npm.taobao.org/js-base64/download/js-base64-2.5.2.tgz", "integrity": "sha1-MTtidN2nGPcU0AszMLuubjjpAgk=" }, - "js-calendar": { - "version": "1.2.3", - "resolved": "https://registry.npm.taobao.org/js-calendar/download/js-calendar-1.2.3.tgz", - "integrity": "sha1-pYOwZEtOaVujlPNE0QPbzHp6fT4=" - }, "js-cookie": { "version": "2.2.1", "resolved": "https://registry.npm.taobao.org/js-cookie/download/js-cookie-2.2.1.tgz", @@ -7547,11 +7461,6 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npm.taobao.org/lodash.throttle/download/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - }, "lodash.transform": { "version": "4.6.0", "resolved": "http://registry.npm.taobao.org/lodash.transform/download/lodash.transform-4.6.0.tgz", @@ -8305,11 +8214,6 @@ "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=", "dev": true }, - "normalize-wheel": { - "version": "1.0.1", - "resolved": "https://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz", - "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=" - }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz", @@ -8945,11 +8849,6 @@ "ts-pnp": "^1.1.6" } }, - "popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npm.taobao.org/popper.js/download/popper.js-1.16.1.tgz", - "integrity": "sha1-KiI8s9x7YhPXQOQDcr5A3kPmWxs=" - }, "portfinder": { "version": "1.0.25", "resolved": "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.25.tgz", @@ -10139,11 +10038,6 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, - "resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ=" - }, "resolve": { "version": "1.17.0", "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.17.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.17.0.tgz", @@ -11484,11 +11378,6 @@ "neo-async": "^2.6.0" } }, - "throttle-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npm.taobao.org/throttle-debounce/download/throttle-debounce-1.1.0.tgz", - "integrity": "sha1-UYU9o3vmihVctugns1FKPEIuic0=" - }, "through": { "version": "2.3.8", "resolved": "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz", @@ -11526,11 +11415,6 @@ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", "dev": true }, - "tinycolor2": { - "version": "1.4.1", - "resolved": "https://registry.npm.taobao.org/tinycolor2/download/tinycolor2-1.4.1.tgz", - "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz", @@ -11975,11 +11859,6 @@ "resolved": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1585683718911&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz", "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=" }, - "v-click-outside-x": { - "version": "4.1.0", - "resolved": "https://registry.npm.taobao.org/v-click-outside-x/download/v-click-outside-x-4.1.0.tgz", - "integrity": "sha1-voJmgOLSVmaooYUzKSnUYkSqJEc=" - }, "v8-compile-cache": { "version": "2.1.0", "resolved": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.1.0.tgz", diff --git a/package.json b/package.json index c247be0..a903cdc 100644 --- a/package.json +++ b/package.json @@ -12,9 +12,8 @@ "dependencies": { "axios": "^0.19.2", "bulma": "^0.8.2", + "clipboard-polyfill": "^2.8.6", "core-js": "^3.6.4", - "element-ui": "^2.13.1", - "iview": "^3.5.4", "js-cookie": "^2.2.1", "markdown-it": "^10.0.0", "node-sass": "^4.14.0", diff --git a/public/app.js b/public/app.js deleted file mode 100644 index d5dd9bf..0000000 --- a/public/app.js +++ /dev/null @@ -1,36 +0,0 @@ -var styles = [ - 'https://cdn.jsdelivr.net/npm/bulma@0.8.2/css/bulma.min.css', - 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css', - 'https://cdn.jsdelivr.net/npm/font-awesome@latest/css/font-awesome.min.css', - 'https://cdn.jsdelivr.net/npm/font-awesome-animation@0.2.1/dist/font-awesome-animation.min.css', - 'https://cloud.jsonpop.cn/go2index/vue/dist/css/app.15d37280.css', -]; -var scripts = [ - "https://cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js", - "https://cdn.jsdelivr.net/npm/vue-i18n@8.17.3/dist/vue-i18n.min.js", - "https://cdn.jsdelivr.net/npm/vue-router@3.1.6/dist/vue-router.min.js", - "https://cdn.jsdelivr.net/npm/axios@0.19.2/dist/axios.min.js", - // 'https://cdn.jsdelivr.net/npm/brace@0.11.1/index.min.js', - // 'https://cdn.jsdelivr.net/npm/brace@0.11.1/ext/language_tools.js', - // 'https://cdn.jsdelivr.net/npm/brace@0.11.1/mode/html.js', - // 'https://cdn.jsdelivr.net/npm/brace@0.11.1/mode/javascript.js', - // 'https://cdn.jsdelivr.net/npm/brace@0.11.1/mode/less.js', - // 'https://cdn.jsdelivr.net/npm/brace@0.11.1/theme/chrome.js', - // 'https://cdn.jsdelivr.net/npm/brace@0.11.1/snippets/javascript.js', - "https://cdn.jsdelivr.net/npm/markdown-it@10.0.0/dist/markdown-it.min.js", - 'https://cloud.jsonpop.cn/go2index/vue/dist/js/chunk-1ed22f12.64aeb3d6.js', - 'https://cloud.jsonpop.cn/go2index/vue/dist/js/chunk-vendors.1a3ef683.js', - 'https://cloud.jsonpop.cn/go2index/vue/dist/js/chunk-4850b756.160c2c8c.js', - 'https://cloud.jsonpop.cn/go2index/vue/dist/js/app.f314926a.js', - 'https://cloud.jsonpop.cn/go2index/vue/dist/js/chunk-56b11c46.cc8e90e1.js', - 'https://cloud.jsonpop.cn/go2index/vue/dist/js/chunk-6a24b24e.b8a4da9e.js', - 'https://cloud.jsonpop.cn/go2index/vue/dist/js/chunk-2d0aed92.7e4c9d1b.js', - 'https://cloud.jsonpop.cn/go2index/vue/dist/js/chunk-2d2137a3.5bc616b8.js', -]; - -styles.forEach((item) => { - document.write(``); -}); -scripts.forEach((item) => { - document.write(``); -}); diff --git a/public/favicon.ico b/public/favicon.ico index df36fcf..bf516e8 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/public/index.html b/public/index.html index c05452f..826b528 100644 --- a/public/index.html +++ b/public/index.html @@ -10,10 +10,6 @@ <% } %> - - <% for (var i in htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.js) { %> - - <% } %>