介绍

doctor-jones-loader 是一个 webpack loader,用于将你的源代码中的字符串格式化并输出。它支持:

  • 字符串字面量
  • 模板字符串
  • JSX 模板
  • .vue 单文件组件中的模板
  • .vue 单文件组件中的脚本

doctor-jones-loader 同样支持 .ts.tsx 文件

安装

npm i doctor-jones-loader -D

配置

最简单的用法:

// webpack.config.js
module.exports = {
  //...
  module: {
    rules: [
      {
        test: /\.js$/,
        use: [
          {
            loader: 'doctor-jones-loader'
          }
        ]
      }
    ]
  }
}

若需自定义格式化选项,可以传入 formatOptions(具体的格式化选项请参考这里):

{
  // ...
  use: [
    {
      loader: 'doctor-jones-loader',
      options: {
        formatOptions: {
          spacing: false
        }
      }
    }
  ]
}

支持 JSX(以 React 为例):

// webpack.config.js
module.exports = {
  //...
  module: {
    rules: [
      {
        test: /\.jsx$/,
        use: [
          {
            loader: 'doctor-jones-loader',
            options: { formatOptions: {/* ... */} }
          },
          {
            loader: 'babel-loader',
            options: {
              presets: ['@babel/preset-react']
            }
          }
        ]
      }
    ]
  }
}

由于 loader 链是逆序调用的,所以需要将 doctor-jones-loader 写在 babel-loader 之前。

支持 Vue:

// webpack.config.js
const VueLoaderPlugin = require('vue-loader/lib/plugin')
module.exports = {
  //...
  module: {
    rules: [
      {
        test: /\.vue$/,
        use: [
          {
            loader: 'doctor-jones-loader',
            options: { formatOptions: {/* ... */} }
          },
          {
            loader: 'vue-loader'
          }
        ]
      }
    ]
  },
  plugins: [
    new VueLoaderPlugin()
  ]
}

支持 TypeScript:

// webpack.config.js
module.exports = {
  //...
  module: {
    rules: [
      {
        test: /\.ts$/,
        use: [
          {
            loader: 'doctor-jones-loader',
            options: { formatOptions: {/* ... */} }
          },
          {
            loader: 'ts-loader'
          }
        ]
      }
    ]
  }
}

禁用格式化

若不希望格式化代码中的某一行,可以通过添加注释的方式来禁用格式化:

const str1 = 'doctor-jones是一个“治疗”中英文混排格式的工具'
// doctor-jones-disabled-line
const str2 = 'doctor-jones是一个“治疗”中英文混排格式的工具'

// str1 会被格式化,而 str2 会被忽略