| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 | 'use strict'/** * FUSEBOX * * Client & Server compiler / bundler / watcher */const colors = require('colors/safe')const fsbx = require('fuse-box')const nodemon = require('nodemon')const babel = require('babel-core')const uglify = require('uglify-es')const fs = require('fs-extra')// ======================================================// Parse cmd arguments// ======================================================const args = require('yargs')  .option('d', {    alias: 'dev',    describe: 'Start in Developer mode',    type: 'boolean'  })  .option('c', {    alias: 'dev-configure',    describe: 'Start in Configure Developer mode',    type: 'boolean'  })  .help('h')  .alias('h', 'help')  .argvlet mode = 'build'const dev = args.d || args.cif (args.d) {  console.info(colors.bgWhite.black(' Starting Fuse in DEVELOPER mode... '))  mode = 'dev'} else if (args.c) {  console.info(colors.bgWhite.black(' Starting Fuse in CONFIGURE DEVELOPER mode... '))  mode = 'dev-configure'} else {  console.info(colors.bgWhite.black(' Starting Fuse in BUILD mode... '))}// ======================================================// BUILD VARS// ======================================================const ALIASES = {  'brace-ext-modelist': 'brace/ext/modelist.js',  'simplemde': 'simplemde/dist/simplemde.min.js',  'socket-io-client': 'socket.io-client/dist/socket.io.js',  'vue': (dev) ? 'vue/dist/vue.js' : 'vue/dist/vue.min.js',  'vue-lodash': 'vue-lodash/dist/vue-lodash.min.js',  'vue-resource': (dev) ? 'vue-resource/dist/vue-resource.js' : 'vue-resource/dist/vue-resource.es2015.js'}const SHIMS = {  jquery: {    source: '../node_modules/jquery/dist/jquery.js',    exports: '$'  },  diff2html: {    source: '../node_modules/diff2html/dist/diff2html.min.js',    exports: 'Diff2Html'  },  diff2htmlui: {    source: '../node_modules/diff2html/dist/diff2html-ui.min.js',    exports: 'Diff2HtmlUI'  }}// ======================================================// Global Tasks// ======================================================console.info(colors.white('└── ') + colors.green('Running global tasks...'))let globalTasks = require('./fuse_tasks')// ======================================================// Fuse Tasks// ======================================================globalTasks.then(() => {  let fuse = fsbx.FuseBox.init({    homeDir: '../client',    output: '../assets/js/$name.js',    alias: ALIASES,    target: 'browser',    tsConfig: './tsconfig.json',    plugins: [      fsbx.EnvPlugin({ NODE_ENV: (dev) ? 'development' : 'production' }),      fsbx.VuePlugin(),      ['.scss', fsbx.SassPlugin({ outputStyle: (dev) ? 'nested' : 'compressed' }), fsbx.CSSPlugin()],      fsbx.BabelPlugin({ comments: false, presets: ['es2015'] }),      fsbx.JSONPlugin()      /* !dev && fsbx.QuantumPlugin({        target: 'browser',        uglify: true,        api: (core) => {          core.solveComputed('default/js/components/editor-codeblock.vue', {            mapping: '/js/ace/ace.js',            fn: (statement, core) => {              statement.setExpression(`'/js/ace/ace.js'`)            }          })          core.solveComputed('default/js/components/editor.component.js', {            mapping: '/js/simplemde/simplemde.min.js',            fn: (statement, core) => {              statement.setExpression(`'/js/simplemde/simplemde.min.js'`)            }          })        }      }) */      // !dev && fsbx.UglifyESPlugin()    ],    debug: false,    log: true  })  const bundleVendor = fuse.bundle('vendor').shim(SHIMS).instructions('~ index.js') // eslint-disable-line no-unused-vars  const bundleApp = fuse.bundle('app').instructions('!> [index.js]')  // const bundleApp = fuse.bundle('app').shim(SHIMS).instructions('> index.js')  const bundleSetup = fuse.bundle('configure').instructions('> configure.js')  switch (mode) {    case 'dev':      bundleApp.watch()      break    case 'dev-configure':      bundleSetup.watch()      break  }  fuse.run().then(() => {    console.info(colors.green.bold('\nAssets compilation + bundling completed.'))    if (dev) {      nodemon({        exec: (args.d) ? 'node server' : 'node wiki configure',        ignore: ['assets/', 'client/', 'data/', 'repo/', 'tests/'],        ext: 'js json',        watch: (args.d) ? ['server'] : ['server/configure.js'],        env: { 'NODE_ENV': 'development' }      })    } else {      console.info(colors.yellow.bold('\nTranspiling vendor bundle...'))      let appCode = babel.transform(fs.readFileSync('./assets/js/app.js', 'utf8'), {        babelrc: false,        compact: false,        filename: 'app.js',        plugins: ['transform-object-assign']      }).code      let vendorCode = babel.transform(fs.readFileSync('./assets/js/vendor.js', 'utf8'), {        babelrc: false,        comments: false,        compact: false,        filename: 'vendor.js',        plugins: [          'transform-es2015-arrow-functions',          'transform-es2015-block-scoped-functions',          'transform-es2015-block-scoping',          'transform-es2015-classes',          'transform-es2015-computed-properties',          'transform-es2015-destructuring',          'transform-es2015-duplicate-keys',          'transform-es2015-for-of',          'transform-es2015-function-name',          'transform-es2015-literals',          'transform-es2015-object-super',          'transform-es2015-parameters',          'transform-es2015-shorthand-properties',          'transform-es2015-spread',          'transform-es2015-sticky-regex',          'transform-es2015-template-literals',          'transform-es2015-typeof-symbol',          'transform-es2015-unicode-regex'        ]      }).code      console.info(colors.yellow.bold('Minifing bundles...'))      fs.writeFileSync('./assets/js/vendor.js', uglify.minify(vendorCode).code, 'utf8')      fs.writeFileSync('./assets/js/app.js', uglify.minify(appCode).code, 'utf8')      fs.writeFileSync('./assets/js/configure.js', uglify.minify(fs.readFileSync('./assets/js/configure.js', 'utf8')).code, 'utf8')      console.info(colors.green.bold('\nBUILD SUCCEEDED.'))      return true    }  }).catch(err => {    console.error(colors.red(' X Bundle compilation failed! ' + err.message))    process.exit(1)  })})
 |