JSPM

  • Created
  • Published
  • Downloads 33751
  • Score
    100M100P100Q168967F
  • License MIT

Utility to find webpack settings in react-scripts and other situations

Package Exports

  • find-webpack

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (find-webpack) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

find-webpack semantic-release Build status

Utility to find webpack settings in react-scripts and other situations

Use

npm i -S find-webpack
const fw = require('find-webpack')
const config = fw.getWebpackOptions()
// if config is an object, we found it!

Works with react-scripts and ejected react-scripts. Uses development environment.

Note: react-scripts assumes there is package.json file in the current working directory, otherwise it won't load.

tryLoadingWebpackConfig

Loading Webpack config from webpack.config.js might need NODE_ENV set, and other tricks.

const fw = require('find-webpack')
const config = fw.tryLoadingWebpackConfig('path/to/webpack.config.js')

Returns undefined if cannot load the config object.

Note: when loading the config object, this module sets process.env.BABEL_ENV and process.env.NODE_ENV to development and keeps it.

Cypress

There is a utility method for cleaning up the found Webpack config for using with Cypress webpack preprocessor: removing optimization plugins, etc.

const fw = require('find-webpack')
const config = fw.getWebpackOptions()
if (config) {
  // config is modified in place
  const opts = {
    reactScripts: true, // cleaning for react-scripts?
    coverage: true, // adds babel-plugin-istanbul
  }
  fw.cleanForCypress(opts, config)
}

If you are using opts.reactScripts = true, you can also add the component test folder to be transpiled using the same options as src folder.

const componentTestFolder = ... // from Cypress config
// config is modified in place
const opts = {
  reactScripts: true, // cleaning for react-scripts?
  addFolderToTranspile: componentTestFolder,
  coverage: true // adds babel-plugin-istanbul
}
fw.cleanForCypress(opts, config)

and you can add option looseModules: true to insert Babel plugin @babel/plugin-transform-modules-commonjs to allow mocking named imports.

addFolderToTranspile

This setting could be an individual folder or a list of folders. For example, you might want to transpile component test folder and fixture folder to allow requiring fixture files from tests.

const componentTestFolder = ... // from Cypress config
const fixtureFolder = ... // from Cypress config
// config is modified in place
const opts = {
  reactScripts: true, // cleaning for react-scripts?
  addFolderToTranspile: [componentTestFolder, fixtureFolder],
  coverage: true // adds babel-plugin-istanbul
}
fw.cleanForCypress(opts, config)

Debugging

Run with environment variable DEBUG=find-webpack to see verbose logs

About

Author

Gleb Bahmutov <gleb.bahmutov@gmail.com> © 2017

License

MIT - do anything with the code, but don't blame me if it does not work.