Skip to content

Commit

Permalink
More cleanup related to always running in the initial working directory
Browse files Browse the repository at this point in the history
- Run Babel module builds in the current working directory
- Replace use of path.join(cwd, ...) with path.resolve(...)
- Remove the cwd parameter from places it's no longer needed

#41
  • Loading branch information
insin committed Jan 17, 2016
1 parent 0b56d3b commit b7893f0
Show file tree
Hide file tree
Showing 12 changed files with 40 additions and 56 deletions.
9 changes: 4 additions & 5 deletions src/commands/build-module.js
Expand Up @@ -10,7 +10,6 @@ import getUserConfig from '../getUserConfig'
export default function(args) {
require('./clean-module')(args)

let cwd = path.join(__dirname, '..')
let es6 = path.resolve('es6')
let lib = path.resolve('lib')
let src = path.resolve('src')
Expand All @@ -25,17 +24,17 @@ export default function(args) {
debug('writing babelrc to %s', babelrc.path)
fs.writeSync(babelrc.fd, JSON.stringify(userConfig.babel))
fs.closeSync(babelrc.fd)
babelArgs = [...babelArgs, '--babelrc', babelrc.path]
babelArgs.push('--babelrc', babelrc.path)
}

console.log('nwb: build-module (es5)')
exec('babel', babelArgs, {cwd})
exec('babel', babelArgs)

if (userConfig.build.jsNext) {
babelArgs[2] = es6
babelArgs = [...babelArgs, '--blacklist=es6.modules']
babelArgs.push('--blacklist=es6.modules')
console.log('nwb: build-module (es6)')
exec('babel', babelArgs, {cwd})
exec('babel', babelArgs)
}

temp.cleanupSync()
Expand Down
2 changes: 1 addition & 1 deletion src/commands/new.js
Expand Up @@ -27,7 +27,7 @@ export default function(args, cb) {
return cb(new UserError(`nwb: ${name}/ directory already exists`))
}

let targetDir = path.join(process.cwd(), name)
let targetDir = path.resolve(name)
console.log(`nwb: new ${projectType}`)
createProject(args, projectType, name, targetDir, cb)
}
2 changes: 1 addition & 1 deletion src/commands/serve-react.js
Expand Up @@ -12,7 +12,7 @@ export default function(args, cb) {

let entry = args._[1]
if (glob.sync(entry).length === 0) {
return cb(new UserError(`entry module not found: ${path.join(process.cwd(), entry)}`))
return cb(new UserError(`entry module not found: ${path.resolve(entry)}`))
}

console.log('nwb: serve-react')
Expand Down
6 changes: 2 additions & 4 deletions src/commands/test.js
@@ -1,13 +1,11 @@
import karmaServer from '../karmaServer'

export default function(args, cb) {
let cwd = process.cwd()
let isCi = process.env.CONTINUOUS_INTEGRATION === 'true'

console.log('nwb: test')
karmaServer({
cwd,
singleRun: !args.server,
runCoverage: isCi || !!args.coverage
codeCoverage: isCi || !!args.coverage,
singleRun: !args.server
}, cb)
}
22 changes: 11 additions & 11 deletions src/createKarmaConfig.js
Expand Up @@ -52,7 +52,7 @@ export function findPlugin(plugins, findId) {
/**
* Handles creation of Karma config which can vary or be configured by the user.
*/
export function getKarmaConfig(cwd, runCoverage, userConfig = {}) {
export function getKarmaConfig({codeCoverage = false} = {}, userConfig = {}) {
let {karma: userKarma = {}} = userConfig

let frameworks = []
Expand Down Expand Up @@ -107,12 +107,12 @@ export function getKarmaConfig(cwd, runCoverage, userConfig = {}) {
plugins.push(require('karma-mocha-reporter'))
}

if (runCoverage) {
if (codeCoverage) {
extraLoaders.push({
id: 'isparta',
test: /\.jsx?$/,
loader: require.resolve('isparta-loader'),
include: path.join(cwd, 'src')
include: path.resolve('src')
})
reporters.push('coverage')
plugins.push(require('karma-coverage'))
Expand All @@ -121,27 +121,27 @@ export function getKarmaConfig(cwd, runCoverage, userConfig = {}) {
return {plugins, frameworks, reporters, extraLoaders}
}

export default function({cwd, singleRun, runCoverage}) {
let userConfig = getUserConfig({absConfig: path.join(cwd, 'nwb.config.js')})
export default function({codeCoverage, singleRun}) {
let userConfig = getUserConfig()
let userKarma = userConfig.karma || {}
let pluginConfig = getPluginConfig(cwd)
let pluginConfig = getPluginConfig()

let {plugins, frameworks, reporters, extraLoaders} = getKarmaConfig(cwd, runCoverage, userConfig)
let testFiles = path.join(cwd, userKarma.tests || DEFAULT_TESTS)
let {plugins, frameworks, reporters, extraLoaders} = getKarmaConfig({codeCoverage}, userConfig)
let testFiles = path.resolve(userKarma.tests || DEFAULT_TESTS)
let preprocessors = {
[require.resolve('babel-core/lib/polyfill')]: ['webpack', 'sourcemap'],
[testFiles]: ['webpack', 'sourcemap']
}

let webpackConfig = createWebpackConfig(cwd, {
let webpackConfig = createWebpackConfig({
server: true,
devtool: 'inline-source-map',
loaders: {
extra: extraLoaders
},
resolve: {
alias: {
'src': path.join(cwd, 'src')
'src': path.resolve('src')
},
// Fall back to resolving runtime dependencies from nwb's dependencies
fallback: path.join(__dirname, '../node_modules')
Expand All @@ -157,7 +157,7 @@ export default function({cwd, singleRun, runCoverage}) {
frameworks,
reporters,
coverageReporter: {
dir: path.join(cwd, 'coverage'),
dir: path.resolve('coverage'),
reporters: [
{type: 'html', subdir: 'html'},
{type: 'lcovonly', subdir: '.'}
Expand Down
4 changes: 2 additions & 2 deletions src/createServerWebpackConfig.js
Expand Up @@ -11,7 +11,7 @@ import getUserConfig from './getUserConfig'
*/
export default function(args, buildConfig) {
let userConfig = getUserConfig(args)
let pluginConfig = getPluginConfig(process.cwd())
let pluginConfig = getPluginConfig()

let {
define, entry, output, loaders = {}, plugins
Expand All @@ -38,7 +38,7 @@ export default function(args, buildConfig) {
})
}

return createWebpackConfig(process.cwd(), {
return createWebpackConfig({
server: true,
devtool: '#eval-source-map',
entry: [
Expand Down
19 changes: 4 additions & 15 deletions src/createWebpackConfig.js
@@ -1,12 +1,3 @@
/**
* Functions for creating a Webpack config with:
*
* - a default set of loaders which can be customised for a particular type of
* build and further tweaked by the end user.
* - a default set of plugins which can be customised for a particular type of
* build and environment, with only configuration or a flag required to enable
* additional pre-selected plugins.
*/
import assert from 'assert'
import path from 'path'

Expand Down Expand Up @@ -217,7 +208,7 @@ export function failBuildOnCompilationError() {
})
}

export function createPlugins(server, cwd, {
export function createPlugins(server, {
// Banner comment to be added to each generated file in a UMD build
banner,
// Extra constant replacements for DefinePlugin. Since plugins aren't
Expand Down Expand Up @@ -263,7 +254,7 @@ export function createPlugins(server, cwd, {
minChunks(module, count) {
return (
module.resource &&
module.resource.indexOf(path.resolve(cwd, 'node_modules')) === 0
module.resource.indexOf(path.resolve('node_modules')) === 0
)
}
}))
Expand Down Expand Up @@ -354,10 +345,8 @@ export function getTopLevelLoaderConfig(userLoaderConfig, cssPreprocessors = {})
* Create a webpack config with a curated set of default loaders suitable for
* creating a static build (default) or serving an app with hot reloading.
*/
export default function createWebpackConfig(cwd, buildConfig, pluginConfig = {}, userConfig = {}) {
assert.equal(typeOf(cwd), 'string', 'cwd is required')
export default function createWebpackConfig(buildConfig, pluginConfig = {}, userConfig = {}) {
assert.equal(typeOf(buildConfig), 'object', 'buildConfig is required')
debug('createWebpackConfig cwd = %s', cwd)
debug('createWebpackConfig buildConfig = %j', buildConfig)

let {
Expand All @@ -372,7 +361,7 @@ export default function createWebpackConfig(cwd, buildConfig, pluginConfig = {},
loaders: createLoaders(server, loaders, userConfig.loaders, pluginConfig),
postLoaders: createExtraLoaders(postLoaders, userConfig.loaders)
},
plugins: createPlugins(server, cwd, plugins),
plugins: createPlugins(server, plugins),
resolve: merge({
extensions: ['', '.web.js', '.js', '.jsx', '.json'],
// Fall back to resolving runtime dependencies from nwb's dependencies,
Expand Down
2 changes: 1 addition & 1 deletion src/getPluginConfig.js
Expand Up @@ -5,7 +5,7 @@ import merge from 'webpack-merge'

import debug from './debug'

export default function getPluginConfig(cwd) {
export default function getPluginConfig(cwd = process.cwd()) {
let pkg = require(path.join(cwd, 'package.json'))
let plugins = [
...Object.keys(pkg.dependencies || {}),
Expand Down
2 changes: 1 addition & 1 deletion src/getUserConfig.js
Expand Up @@ -21,7 +21,7 @@ let warnedAboutBuildConfig = false
export default function getUserConfig(args = {}) {
// Try to load default user config, or user a config file path we were given
let userConfig = {}
let userConfigPath = args.absConfig || path.join(process.cwd(), args.config || 'nwb.config.js')
let userConfigPath = args.absConfig || path.resolve(args.config || 'nwb.config.js')

if (glob.sync(userConfigPath).length === 0) {
throw new UserError(`nwb: couldn't find a config file at ${userConfigPath}`)
Expand Down
4 changes: 2 additions & 2 deletions src/webpackBuild.js
Expand Up @@ -20,7 +20,7 @@ export default function(args, buildConfig = {}, cb) {
}

let userConfig = getUserConfig(args)
let pluginConfig = getPluginConfig(process.cwd())
let pluginConfig = getPluginConfig()
if (typeof buildConfig == 'function') {
buildConfig = buildConfig()
}
Expand All @@ -32,7 +32,7 @@ export default function(args, buildConfig = {}, cb) {
devtool, entry, output, loaders, define, plugins, ...otherBuildConfig
} = buildConfig

let webpackConfig = createWebpackConfig(process.cwd(), {
let webpackConfig = createWebpackConfig({
server: false,
devtool,
entry,
Expand Down
14 changes: 7 additions & 7 deletions tests/createKarmaConfig-test.js
Expand Up @@ -38,7 +38,7 @@ describe('getKarmaConfig()', () => {
'reporter:mocha'
]
it('defaults to Mocha', () => {
let {frameworks, reporters, plugins, extraLoaders} = getKarmaConfig('test', false)
let {frameworks, reporters, plugins, extraLoaders} = getKarmaConfig({codeCoverage: false})
expect(frameworks).toEqual(['mocha'])
expect(reporters).toEqual(['mocha'])
expect(extraLoaders).toEqual([])
Expand All @@ -47,7 +47,7 @@ describe('getKarmaConfig()', () => {
)
})
it('adds coverage config when asked to', () => {
let {frameworks, reporters, plugins, extraLoaders} = getKarmaConfig('test', true)
let {frameworks, reporters, plugins, extraLoaders} = getKarmaConfig({codeCoverage: true})
expect(frameworks).toEqual(['mocha'])
expect(reporters).toEqual(['mocha', 'coverage'])
expectedDefaultPlugins.concat(['preprocessor:coverage']).forEach(plugin => {
Expand All @@ -63,7 +63,7 @@ describe('getKarmaConfig()', () => {
let tapReporter = {'reporter:tap': []}

it('defaults the reporter to dots if only a framework plugin is configured', () => {
let {frameworks, reporters, plugins} = getKarmaConfig('test', false, {
let {frameworks, reporters, plugins} = getKarmaConfig({codeCoverage: false}, {
karma: {
frameworks: [tapeFramework]
}
Expand All @@ -73,7 +73,7 @@ describe('getKarmaConfig()', () => {
expect(findPlugin(plugins, 'framework:tape')).toExist()
})
it('defaults the reporter to dots if only a framework name and plugin is configured', () => {
let {frameworks, reporters, plugins} = getKarmaConfig('test', false, {
let {frameworks, reporters, plugins} = getKarmaConfig({codeCoverage: false}, {
karma: {
frameworks: ['tape'],
plugins: [tapeFramework]
Expand All @@ -84,7 +84,7 @@ describe('getKarmaConfig()', () => {
expect(findPlugin(plugins, 'framework:tape')).toExist()
})
it('uses the given reporter if a plugin is also configured', () => {
let {frameworks, reporters, plugins} = getKarmaConfig('test', false, {
let {frameworks, reporters, plugins} = getKarmaConfig({codeCoverage: false}, {
karma: {
frameworks: [tapeFramework],
reporters: [tapReporter]
Expand All @@ -96,7 +96,7 @@ describe('getKarmaConfig()', () => {
expect(findPlugin(plugins, 'reporter:tap')).toExist()
})
it('uses the given reporter if a name plugin is also configured', () => {
let {frameworks, reporters, plugins} = getKarmaConfig('test', false, {
let {frameworks, reporters, plugins} = getKarmaConfig({codeCoverage: false}, {
karma: {
frameworks: ['tape'],
reporters: ['tap'],
Expand All @@ -109,7 +109,7 @@ describe('getKarmaConfig()', () => {
expect(findPlugin(plugins, 'reporter:tap')).toExist()
})
it('makes sure the Mocha plugins will be loaded when necessary', () => {
let {frameworks, reporters, plugins} = getKarmaConfig('test', false, {
let {frameworks, reporters, plugins} = getKarmaConfig({codeCoverage: false}, {
karma: {
frameworks: ['mocha', 'chai', 'chai-as-promised'],
reporters: ['mocha'],
Expand Down
10 changes: 4 additions & 6 deletions tests/createWebpackConfig-test.js
Expand Up @@ -7,15 +7,13 @@ import createWebpackConfig, {
styleLoaderName
} from '../src/createWebpackConfig'

let cwd = process.cwd()

let findLoaderById = (loaders, id) => {
return loaders.filter(loader => loader.id === id)[0]
}

describe('createWebpackConfig()', () => {
describe('without any config arguments', () => {
let config = createWebpackConfig(cwd, {})
let config = createWebpackConfig({})
it('creates a default webpack build config', () => {
expect(Object.keys(config)).toEqual(['module', 'plugins', 'resolve'])
expect(config.module.loaders.map(loader => loader.loader).join('\n'))
Expand All @@ -34,7 +32,7 @@ describe('createWebpackConfig()', () => {
})

describe('with a server=true config argument', () => {
let config = createWebpackConfig(cwd, {server: true})
let config = createWebpackConfig({server: true})
it('creates a server webpack config', () => {
expect(config.module.loaders.map(loader => loader.loader).join('\n'))
.toContain('babel-loader')
Expand All @@ -58,7 +56,7 @@ describe('createWebpackConfig()', () => {
}

describe('with plugin config for a CSS preprocessor', () => {
let config = createWebpackConfig(cwd, {server: true}, cssPreprocessorPluginConfig)
let config = createWebpackConfig({server: true}, cssPreprocessorPluginConfig)
it('creates a style loading pipeline', () => {
let loader = findLoaderById(config.module.loaders, 'sass-pipeline')
expect(loader).toExist()
Expand All @@ -74,7 +72,7 @@ describe('createWebpackConfig()', () => {
})

describe('with plugin config for a CSS preprocessor and user config for its loader', () => {
let config = createWebpackConfig(cwd, {server: true}, cssPreprocessorPluginConfig, {
let config = createWebpackConfig({server: true}, cssPreprocessorPluginConfig, {
loaders: {
sass: {
query: {
Expand Down

0 comments on commit b7893f0

Please sign in to comment.