1.0.0 • Published 6 years ago

webpack-devserver-helper v1.0.0

Weekly downloads
2
License
ISC
Repository
github
Last release
6 years ago

Webpack devServer helper

Build Status Test Coverage Maintainability License

A processor to mock data from static file via devServer.historyApiFallback.rewrites. Also a tool to parse mock configuration. Another tool is used to process devServer.proxy configuration, taking into account the public path and other stuff, to simplify its configuration.

Mock illustration

config

  • folder

    	`mock`
  • mocked file extension

    	`json`
  • conversion map

    	```
    		'article/(\\d+)/comment/(\\d+)' =>  'article_$1_comment_$2'
    	```

url

`article/235/comment/456`

result url

`mock/article_456_comment_235.json`

Webpack config example

const helper =require('webpack-devserver-helper');
const publicPath = 'root';
const cfg= [
  ['article/(\\d+)/comment/(\\d+)', 'article_$1_comment_$2_']
];
const mock=helper.staticMock(helper.parseMockConfig(cfg), publicPath);
module.exports={
  ...,
  devServer: {
    historyApiFallback: {
      verbose: true,
      index: publicPath + '/index.html',
      rewrites: [{
        from: new RegExp(`^api/([^.]+)`),
        to: function(ctx){
          return mock(ctx.match[1]);
        } 
      }]
    },
    setup:function setup(app){
      app.post('/api/:path', function(req, res, next) {
        req.method='GET';
        next();
      });
    }
  }
};

Proxy illustration

config

output

[{
  context: ['root/auth', 'root/api'],
  target: 'http://localhost:3000',
}]

Docs

Functions

parseMockConfig(cfg) ⇒ Object

Generate config of full format from shorthand, for staticMock using. Acceptible formats refering to @see.

Kind: global function
Returns: Object - - refined config
See: input and output formats

  • input

    • {true} => {folder:'mock'}
    • {string} 'mockDir' => {folder:'mockDir'},
    • {array}
      ['article/(\\d+)/comment/(\\d+)', 'article_$1_comment_$2_']
      =>
      {folder:'mock', rewrites:[]}
    • {Object} if 'folder' is missed, set to 'mock', or stay untouched
  • output

    {
      folder:'mock',
      rewrites:[
        ['article/(\\d+)/comment/(\\d+)', 'article_$1_comment_$2_']
      ]
    }
ParamTypeDescription
cfgObjectpassed in shorthand config.

staticMock(mockConfig, publicPath, ext) ⇒ function

Create a path mapping function used for devServer config. Config details referring to webpack config example.

Kind: global function
Returns: function - - function mapping path to mock data file name.

ParamTypeDefaultDescription
mockConfigObjectreturned from parseMockConfig()
publicPathstringwhat is configured in webpack
extstring"json"default file extension mapped when no rewrites matched

parseProxies(proxies, publicPath, apiPrefix) ⇒ Object

Refine setting for devServer.proxy. 1) prepend publicPath to key. 2) rewrites them to empty string, if no 'pathRewrite' is specified. 3) set logLevel to 'debug'.

Kind: global function
Returns: Object - the config object with correct format.
See: allowed format for input config:

  • {string} assume apiPrefix is source to match 'http://api.com'
  • {object} {'api':'http://afsfa.com'}

    or (will be wrapped into array automatically)

    {
      context: ['/auth', '/api'],
      target: 'http://localhost:3000',
    }
  • {array}

    [{
     context: ["/auth", "/api"],
     target: "http://localhost:3000",
    }].
ParamTypeDescription
proxiesstring | object | arrayinput config, ref @see to see allowed format.
publicPathstringthe option set in webpack.
apiPrefixstringdefault url to match when url is missing in config.

License

MIT.

1.0.0

6 years ago