|
| 1 | +const { readFileSync } = require('fs'); |
| 2 | +const { dirname } = require('path'); |
| 3 | + |
| 4 | +function readFile(package, file) { |
| 5 | + const dir = dirname(require.resolve(`${package}/package.json`)); |
| 6 | + let data; |
| 7 | + try { |
| 8 | + data = readFileSync(`${dir}/${file}`); |
| 9 | + } catch (err) { |
| 10 | + console.error(err.message); |
| 11 | + } |
| 12 | + return data; |
| 13 | +} |
| 14 | + |
| 15 | +const plugins = { |
| 16 | + prism: ['prismjs', 'components/prism-core.min.js'], |
| 17 | + prism_autoloader: ['prismjs', 'plugins/autoloader/prism-autoloader.min.js'], |
| 18 | + prism_autoloader: ['prismjs', 'plugins/line-numbers/prism-line-numbers.min.js'], |
| 19 | + mathjax: ['mathjax', 'es5/tex-mml-chtml.js'], |
| 20 | + katex: ['katex', 'dist/katex.min.css'], |
| 21 | + copy_tex_js: ['katex', 'dist/contrib/copy-tex.min.js'], |
| 22 | + copy_tex_css: ['katex', 'dist/contrib/copy-tex.min.css'], |
| 23 | + jquery: ['jquery', 'dist/jquery.min.js'], |
| 24 | + fancybox: ['@fancyapps/fancybox', 'dist/jquery.fancybox.min.js'], |
| 25 | + fancybox_css: ['@fancyapps/fancybox', 'dist/jquery.fancybox.min.css'], |
| 26 | + mediumzoom: ['medium-zoom', 'dist/medium-zoom.min.js'], |
| 27 | + lazyload: ['lozad', 'dist/lozad.min.js'], |
| 28 | + pangu: ['pangu', 'dist/browser/pangu.min.js'], |
| 29 | + quicklink: ['quicklink', 'dist/quicklink.umd.js'], |
| 30 | + disqusjs_js: ['disqusjs', 'dist/disqus.js'], |
| 31 | + disqusjs_css: ['disqusjs', 'dist/disqusjs.css'], |
| 32 | + valine: ['valine', 'dist/valine.min.js'], |
| 33 | + gitalk_js: ['gitalk', 'dist/gitalk.min.js'], |
| 34 | + gitalk_css: ['gitalk', 'dist/gitalk.css'], |
| 35 | + algolia_search: ['algoliasearch', 'dist/algoliasearch-lite.umd.js'], |
| 36 | + instant_search: ['instantsearch.js', 'dist/instantsearch.production.min.js'], |
| 37 | + mermaid: ['mermaid', 'dist/mermaid.min.js'], |
| 38 | + pace: ['pace-js', 'pace.min.js'], |
| 39 | + pace_css: ['pace-js', 'themes/blue/pace-theme-minimal.css'], |
| 40 | + canvas_ribbon: ['ribbon.js', 'dist/ribbon.min.js'] |
| 41 | +}; |
| 42 | + |
| 43 | +module.exports = function(hexo) { |
| 44 | + const vendors = {}; |
| 45 | + const generator = []; |
| 46 | + for (const [key, item] of Object.entries(plugins)) { |
| 47 | + const path = 'lib/' + item.join('/'); |
| 48 | + let data = readFile(...item); |
| 49 | + if (data) { |
| 50 | + vendors[key] = path; |
| 51 | + generator.push({ |
| 52 | + path, |
| 53 | + data |
| 54 | + }); |
| 55 | + } |
| 56 | + } |
| 57 | + return { |
| 58 | + vendors, |
| 59 | + generator |
| 60 | + } |
| 61 | +} |
0 commit comments