自定义 webpack 配置

Examples

可以使用些一些常见的模块

多配置可以组合在一起,如:

  1. const withTypescript = require('@zeit/next-typescript')
  2. const withSass = require('@zeit/next-sass')
  3.  
  4. module.exports = withTypescript(withSass({
  5. webpack(config, options) {
  6. // Further custom configuration here
  7. return config
  8. }
  9. }))

为了扩展webpack使用,可以在next.config.js定义函数。

  1. // next.config.js is not transformed by Babel. So you can only use javascript features supported by your version of Node.js.
  2.  
  3. module.exports = {
  4. webpack: (config, { buildId, dev, isServer, defaultLoaders }) => {
  5. // Perform customizations to webpack config
  6. // Important: return the modified config
  7. return config
  8. },
  9. webpackDevMiddleware: config => {
  10. // Perform customizations to webpack dev middleware config
  11. // Important: return the modified config
  12. return config
  13. }
  14. }

webpack的第二个参数是个对象,你可以自定义配置它,对象属性如下所示:

  • buildId - 字符串类型,构建的唯一标示
  • dev - Boolean型,判断你是否在开发环境下
  • isServer - Boolean 型,为true使用在服务端, 为false使用在客户端.
  • defaultLoaders - 对象型 ,内部加载器, 你可以如下配置
    • babel - 对象型,配置babel-loader.
    • hotSelfAccept - 对象型, hot-self-accept-loader配置选项.这个加载器只能用于高阶案例。如 @zeit/next-typescript添加顶层 typescript 页面。
      defaultLoaders.babel使用案例如下:
  1. // Example next.config.js for adding a loader that depends on babel-loader
  2. // This source was taken from the @zeit/next-mdx plugin source:
  3. // https://github.com/zeit/next-plugins/blob/master/packages/next-mdx
  4. module.exports = {
  5. webpack: (config, {}) => {
  6. config.module.rules.push({
  7. test: /\.mdx/,
  8. use: [
  9. options.defaultLoaders.babel,
  10. {
  11. loader: '@mdx-js/loader',
  12. options: pluginOptions.options
  13. }
  14. ]
  15. })
  16.  
  17. return config
  18. }
  19. }