webpack-dev-server

1. open 服务启动后,打开浏览器

devServer {
    open: true, // 或者
    // open:  'Google Chrome',  //  ''Chrome' is 'Google Chrome' on macOS, 'google-chrome' on Linux and 'chrome' on Windows.

2. openPage 服务启动后, 默认打开指定的页面

devServer {
    openPage:  '/different/page',
}

3. overlay 编译错误后,错误信息全屏覆盖页面

// 只有错误信息
devServer {
    overlay: true,
}
// 错误信息和警告信息
devServer {
    overlay : {
        warnings: true,
        errors: true, 
    }
} 

4. port 监听的端口

module.exports = {
  //...
  devServer: {
    port: 8080
  }
};

5. proxy 服务器代理

1)纯路由

module.exports = {
    // ...
    devServer: {
        proxy: {
            '/api': 'http://localhost:3000'
           // /api/users的请求会被代理到http://localhost:3000/api/users
        }
    }
}

2)想修改路由

module.exports = {
  //...
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:3000',
        pathRewrite: {'^/api' : ''}
       // /api/users将被代理成http://localhost:3000/users
      }
    }
  }
};

3)默认情况下,后端运行在https服务器上但是证书无效时,请求不予接收,如果想接收,设置如下

module.exports = {
  //...
  devServer: {
    proxy: {
      '/api': {
        target: 'https://other-server.example.com',
        secure: false
      }
    }
  }
};

4) 自己决定需要代理哪些内容:bypass

 !  返回null或者undefined,正常代理

 !! 返回false,产生一个404错误

 !!!返回一个路由

module.exports = {
  //...
  devServer: {
    proxy: {
      // 实现当/api请求是浏览器请求时,需要加载一个页面;当是api请求时,
      // 还是走代理;函数默认返回undefine,所以if之外的情况都走代理
      '/api': {
        target: 'http://localhost:3000',
        bypass: function(req, res, proxyOptions) {
          if (req.headers.accept.indexOf('html') !== -1) {
            console.log('Skipping proxy for browser request.');
            return '/index.html';
          }
        }
      }
    }
  }
};

5)代理多个指定路由到同一个target: context

module.exports = {
  //...
  devServer: {
    proxy: [{ // 注意,最外层变成了数组
      context: ['/auth', '/api'], // 使用context
      target: 'http://localhost:3000',
    }]
  }
};

6)代理根文件

module.exports = {
  //...
  devServer: {
    index: '', // specify to enable root proxying
    host: '...',
    contentBase: '...',
    proxy: {
      context: () => true,
      target: 'http://localhost:1234'
    }
  }
};

7)解决跨域问题:changeOrigin

module.exports = {
  //...
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:3000',
        changeOrigin: true
      }
    }
  }
};

6. 热更新:hot 

module.exports = {
  //...
  devServer: {
    hot: true
  }
};

7. 访问打包后的文件:publicPath

module.exports = {
  //...
  devServer: {
    publicPath: '/assets/', // 也可以'http://localhost:8080/assets/或者'/'
  }
   //  表明可以访问打包后的文件http://localhost:8080/assets/bundle.js
};

⚠️: 建议和output.publicPath使用同样的路径

8.加载静态资源:contentBase,优先级比publicPath低

module.exports = {
  //...
  devServer: {
    contentBase: path.join(__dirname, 'public')
  }
};
// 如果多个
module.exports = {
  //...
  devServer: {
    contentBase: [path.join(__dirname, 'public'), path.join(__dirname, 'assets')]
  }
};

⚠️:最好是绝对路径

9.使用本地IP打开

module.exports = {
  //...
  devServer: {
    useLocalIp: true
  }
};

 

posted @ 2019-08-27 16:11  Lyra李  阅读(492)  评论(0编辑  收藏  举报