ack-webpack
Version:
A code bundler that drastically reduces setup time by offering an init prompt of project setup questions and includes a fantastic browser reloader.
113 lines (96 loc) • 3.76 kB
JavaScript
const ackPath = require('ack-path')
const promiseSpawn = require('../promiseSpawn.function')
const install = require('../install.function')
const path = require('path')
const fs = require('fs')
const log = require("../log.function")
const promisePrompt = require('../promisePrompt.function')
const ackPackHelp = new (require('./ack-package.help'))()
const PackHelp = require('./package.help.js')
const packHelp = new PackHelp()
const assetDefaultPath = path.join('app','www','assets','fonts','font-awesome')
function runPrompts(){
const schema = [{
description:'npm install font-awesome',
name:'install',
default:'yes'
}]
const scriptDefined = packHelp.scriptDefined("copy:fonts")
if( !scriptDefined ){
schema.push({
description:'Add convenient scripts to npm package',
name:'addScripts',
default:'yes'
})
schema.push({
description:'Enter project assets path',
name:'assetPath',
default:assetDefaultPath,
ask: ()=>promisePrompt.isLikeTrue( promisePrompt.prompt.history('addScripts').value )
})
}
schema.push({
description:'Run script to clone font-awesome to assets folder',
name:'copyFontAwesome',
default:'yes',
ask: ()=>scriptDefined || promisePrompt.isLikeTrue( promisePrompt.prompt.history('addScripts').value )
})
return promisePrompt(schema)
}
function processPrompts(results){
let promise = Promise.resolve()
if(!results)return promise;
if( promisePrompt.isLikeTrue(results.install) ){
promise = promise.then( ()=>promiseSpawn.installPacks(['font-awesome']) )
}
const addScripts = results.addScripts!=null && promisePrompt.isLikeTrue(results.addScripts)
if(addScripts){
const assetPath = results.assetPath.length ? results.assetPath : assetDefaultPath
const cssFileRef = path.join(assetPath, "css", "font-awesome.min.css")
const fontFolderRef = path.join(assetPath, "fonts")
packHelp.setScript(
"copy:fonts",
"npm-run-all -s copy:font-awesome:fonts copy:font-awesome:css",
"Runs two commands to move font-awesome from node_modules into www output asset folder"
)
packHelp.setScript(
"copy:font-awesome:css",
"ack-path copy node_modules/font-awesome/css/font-awesome.min.css "+cssFileRef,
"Clones font-awesome.min.css file from node_modules folder into www output asset folder"
)
packHelp.setScript(
"copy:font-awesome:fonts",
"ack-path copy node_modules/font-awesome/fonts "+fontFolderRef,
"Clones font-awesome font files like .ttf and .woff like files from node_modules folder into www output asset folder"
)
promise = promise
.then(()=>log('Saving package.json...'))
.then(()=>packHelp.save())
if( !promiseSpawn.isModuleInstalled('ack-path') ){
promise = promise
.then( ()=>log('To handle copy/paste of font-awesome files, ack-path will be installed') )
.then( ()=>promiseSpawn.installPacks(['ack-path']) )
}
if( !promiseSpawn.isModuleInstalled('npm-run-all') ){
promise = promise
.then( ()=>log('To handle running multiple scripts across any device, npm-run-all will be installed') )
.then( ()=>promiseSpawn.installPacks(['npm-run-all']) )
}
}
if(results.copyFontAwesome!=null && promisePrompt.isLikeTrue(results.copyFontAwesome)){
promise = promise
.then(()=>log('Cloning font-awesome from node_modules folder into asset folder...'))
.then( ()=>promiseSpawn(['npm','run','copy:fonts'], {log:log}) )
}
return promise
.then( ()=>ackPackHelp.updatePrompt("init:font-awesome", results).save() )
}
runPrompts()
.then(processPrompts)
.catch(e=>{
if(e.message=='canceled'){
console.log();
return
}
log.error(e)
})