rump-scripts
Version:
Rump piece for building JS with Webpack
95 lines (85 loc) • 2.22 kB
JavaScript
import {resolve} from 'path'
import {ProvidePlugin} from 'webpack'
const aliases = {},
extensions = ['.js'],
globExtensions = ['js'],
loaders = [],
plugins = [],
pkg = require(resolve('package')),
{dependencies = {}} = pkg,
{devDependencies = {}} = pkg,
{optionalDependencies = {}} = pkg,
{peerDependencies = {}} = pkg,
keys1 = Object.keys(dependencies),
keys2 = Object.keys(devDependencies),
keys3 = Object.keys(optionalDependencies),
keys4 = Object.keys(peerDependencies),
modules = [...keys1, ...keys2, ...keys3, ...keys4]
let glob
// JSON
if(moduleExists('json-loader')) {
extensions.push('.json')
loaders.push({
test: /\.json$/,
loaders: ['json-loader'],
})
}
// JS with Babel (auto self contain if Babel runtime is available)
if(moduleExists('babel-loader')) {
extensions.push('.jsx')
globExtensions.push('jsx')
loaders.push({
test: /^(?!.*(bower_components|node_modules))+.+\.jsx?$/,
loaders: ['babel-loader'],
})
}
// CoffeeScript
if(moduleExists('coffee-loader')) {
extensions.push('.coffee', '.coffee.md', '.litcoffee')
globExtensions.push('coffee', 'coffee.md', 'litcoffee')
loaders.push({
test: /\.coffee$/,
loaders: ['coffee-loader'],
})
loaders.push({
test: /\.(coffee\.md|litcoffee)$/,
loaders: ['coffee-loader?literate'],
})
}
// HTML
if(moduleExists('html-loader')) {
extensions.push('.html')
loaders.push({
test: /\.html$/,
loaders: ['html-loader?-minimize'],
})
}
// Riot
if(moduleExists('riotjs-loader')) {
extensions.push('.tag')
globExtensions.push('tag')
loaders.push({
test: /\.tag$/,
loaders: moduleExists('babel-loader')
? ['babel-loader', 'riotjs-loader?type=none']
: ['riotjs-loader'],
})
plugins.push(new ProvidePlugin({riot: 'riot'}))
}
// Build glob
glob = globExtensions.length > 1
? `*.{${globExtensions.join(',')}}`
: `*.${globExtensions[0]}`
export {aliases, extensions, glob, loaders, plugins}
function moduleExists(mod, path = mod) {
if(~modules.indexOf(mod)) {
try {
require.resolve(path)
return true
}
catch(e) {
return false
}
}
return false
}