插件选项

如果您想让您的用户自定义您的Babel插件的行为您可以接受用户可以指定的插件特定选项,如下所示:

  1. {
  2. plugins: [
  3. ["my-plugin", {
  4. "option1": true,
  5. "option2": false
  6. }]
  7. ]
  8. }

这些选项会通过`状态</>对象传递给插件访问者:

  1. export default function({ types: t }) {
  2. return {
  3. visitor: {
  4. FunctionDeclaration(path, state) {
  5. console.log(state.opts);
  6. // { option1: true, option2: false }
  7. }
  8. }
  9. }
  10. }
  11. `

这些选项是特定于插件的,您不能访问其他插件中的选项。

插件的准备和收尾工作

插件可以具有在插件之前或之后运行的函数。它们可以用于设置或清理/分析目的。

  1. export default function({ types: t }) {
  2. return {
  3. pre(state) {
  4. this.cache = new Map();
  5. },
  6. visitor: {
  7. StringLiteral(path) {
  8. this.cache.set(path.node.value, 1);
  9. }
  10. },
  11. post(state) {
  12. console.log(this.cache);
  13. }
  14. };
  15. }

在插件中启用其他语法

插件可以启用babylon plugins</>,以便用户不需要安装/启用它们。 这可以防止解析错误,而不会继承语法插件。

  1. export default function({ types: t }) {
  2. return {
  3. inherits: require("babel-plugin-syntax-jsx")
  4. };
  5. }

抛出一个语法错误

如果您想用babel-code-frame和一个消息抛出一个错误:

  1. export default function({ types: t }) {
  2. return {
  3. visitor: {
  4. StringLiteral(path) {
  5. throw path.buildCodeFrameError("Error message here");
  6. }
  7. }
  8. };
  9. }

该错误看起来像:

  1. file.js: Error message here
  2. 7 |
  3. 8 | let tips = [
  4. > 9 | "Click on any AST node with a '+' to expand it",
  5. | ^
  6. 10 |
  7. 11 | "Hovering over a node highlights the \
  8. 12 | corresponding part in the source code",