mirror of https://github.com/IoTcat/docsify.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
2.8 KiB
118 lines
2.8 KiB
const rollup = require('rollup') |
|
const buble = require('rollup-plugin-buble') |
|
const commonjs = require('rollup-plugin-commonjs') |
|
const nodeResolve = require('rollup-plugin-node-resolve') |
|
const uglify = require('rollup-plugin-uglify') |
|
const replace = require('rollup-plugin-replace') |
|
const isProd = process.env.NODE_ENV === 'production' |
|
const version = process.env.VERSION || require('../package.json').version |
|
const chokidar = require('chokidar') |
|
const path = require('path') |
|
|
|
const build = function (opts) { |
|
rollup |
|
.rollup({ |
|
input: opts.input, |
|
plugins: (opts.plugins || []).concat([ |
|
buble(), |
|
commonjs(), |
|
nodeResolve(), |
|
replace({ |
|
__VERSION__: version, |
|
'process.env.SSR': false |
|
}) |
|
]) |
|
}) |
|
.then(function (bundle) { |
|
var dest = 'lib/' + (opts.output || opts.input) |
|
|
|
console.log(dest) |
|
bundle.write({ |
|
format: 'iife', |
|
file: dest, |
|
strict: false |
|
}) |
|
}) |
|
.catch(function (err) { |
|
console.error(err) |
|
}) |
|
} |
|
const buildCore = function () { |
|
build({ |
|
input: 'src/core/index.js', |
|
output: 'docsify.js' |
|
}) |
|
|
|
if (isProd) { |
|
build({ |
|
input: 'src/core/index.js', |
|
output: 'docsify.min.js', |
|
plugins: [uglify()] |
|
}) |
|
} |
|
} |
|
const buildAllPlugin = function () { |
|
var plugins = [ |
|
{name: 'search', input: 'search/index.js'}, |
|
{name: 'ga', input: 'ga.js'}, |
|
{name: 'emoji', input: 'emoji.js'}, |
|
{name: 'external-script', input: 'external-script.js'}, |
|
{name: 'front-matter', input: 'front-matter/index.js'}, |
|
{name: 'zoom-image', input: 'zoom-image.js'}, |
|
{name: 'disqus', input: 'disqus.js'}, |
|
{name: 'gitalk', input: 'gitalk.js'} |
|
] |
|
|
|
plugins.forEach(item => { |
|
build({ |
|
input: 'src/plugins/' + item.input, |
|
output: 'plugins/' + item.name + '.js' |
|
}) |
|
}) |
|
|
|
if (isProd) { |
|
plugins.forEach(item => { |
|
build({ |
|
input: 'src/plugins/' + item.input, |
|
output: 'plugins/' + item.name + '.min.js', |
|
plugins: [uglify()] |
|
}) |
|
}) |
|
} |
|
} |
|
|
|
if (!isProd) { |
|
chokidar |
|
.watch(['src/core', 'src/plugins'], { |
|
atomic: true, |
|
awaitWriteFinish: { |
|
stabilityThreshold: 1000, |
|
pollInterval: 100 |
|
} |
|
}) |
|
.on('change', p => { |
|
console.log('[watch] ', p) |
|
const dirs = p.split(path.sep) |
|
if (dirs[1] === 'core') { |
|
buildCore() |
|
} else if (dirs[2]) { |
|
const name = path.basename(dirs[2], '.js') |
|
const input = `src/plugins/${name}${ |
|
/\.js/.test(dirs[2]) ? '' : '/index' |
|
}.js` |
|
|
|
build({ |
|
input, |
|
output: 'plugins/' + name + '.js' |
|
}) |
|
} |
|
}) |
|
.on('ready', () => { |
|
console.log('[start]') |
|
buildCore() |
|
buildAllPlugin() |
|
}) |
|
} else { |
|
buildCore() |
|
buildAllPlugin() |
|
}
|
|
|