如何使用Babel在JavaScript中合并多个函数

如何使用Babel在JavaScript中合并多个函数,javascript,node.js,parsing,babeljs,abstract-syntax-tree,Javascript,Node.js,Parsing,Babeljs,Abstract Syntax Tree,我有许多JavaScript模块,它们都导出数据和一些其他不同的函数。我想把所有这些文件合并成一个文件。以下是其中一些: File1.js export default { data() { return { f1: 'something 1' } }, foo() { // do something 1 } } export default { data() { r

我有许多JavaScript模块,它们都导出
数据
和一些其他不同的函数。我想把所有这些文件合并成一个文件。以下是其中一些:

File1.js

export default {
    data() {
        return {
            f1: 'something 1'
        }
    },
    foo() {
        // do something 1
    }
}
export default {
    data() {
        return {
            f2: 'something 2'
        }
    },
    bar() {
        // do something 2
    }
}
export default {
    data() {
        return {
            f3: 'something 3'
        }
    },
    zoo() {
        // do something 3
    }
}
export default {
    data() {
        return {
            f1: 'something 1',
            f2: 'something 2',
            f3: 'something 3'
        }
    }, 
    foo() {
        // do something 1
    },
    bar() {
        // do something 2
    },
    zoo() {
        // do something 3
    }
}
File2.js

export default {
    data() {
        return {
            f1: 'something 1'
        }
    },
    foo() {
        // do something 1
    }
}
export default {
    data() {
        return {
            f2: 'something 2'
        }
    },
    bar() {
        // do something 2
    }
}
export default {
    data() {
        return {
            f3: 'something 3'
        }
    },
    zoo() {
        // do something 3
    }
}
export default {
    data() {
        return {
            f1: 'something 1',
            f2: 'something 2',
            f3: 'something 3'
        }
    }, 
    foo() {
        // do something 1
    },
    bar() {
        // do something 2
    },
    zoo() {
        // do something 3
    }
}
File3.js

export default {
    data() {
        return {
            f1: 'something 1'
        }
    },
    foo() {
        // do something 1
    }
}
export default {
    data() {
        return {
            f2: 'something 2'
        }
    },
    bar() {
        // do something 2
    }
}
export default {
    data() {
        return {
            f3: 'something 3'
        }
    },
    zoo() {
        // do something 3
    }
}
export default {
    data() {
        return {
            f1: 'something 1',
            f2: 'something 2',
            f3: 'something 3'
        }
    }, 
    foo() {
        // do something 1
    },
    bar() {
        // do something 2
    },
    zoo() {
        // do something 3
    }
}
预期结果如下:

Result.js

export default {
    data() {
        return {
            f1: 'something 1'
        }
    },
    foo() {
        // do something 1
    }
}
export default {
    data() {
        return {
            f2: 'something 2'
        }
    },
    bar() {
        // do something 2
    }
}
export default {
    data() {
        return {
            f3: 'something 3'
        }
    },
    zoo() {
        // do something 3
    }
}
export default {
    data() {
        return {
            f1: 'something 1',
            f2: 'something 2',
            f3: 'something 3'
        }
    }, 
    foo() {
        // do something 1
    },
    bar() {
        // do something 2
    },
    zoo() {
        // do something 3
    }
}
我看过一些文章,如果使用AST技术,它可能会更可靠。这是一篇很好的文章:

我如何使用Babel做到这一点?

使用(使用Babel在绑定之前使用a转换代码),您可以将
数据
方法中的任何功能移动到自己的模块中(请记住,这可能意味着在一个模块导出中处理该方法的不同用法)

在其他文件中,您可以根据需要创建和引用新的实用程序函数

Babel将把
import
语句转换为
require()
表达式,Webpack将使用这些表达式将这些不同的模块捆绑起来分发。在该捆绑包中,您将只看到一个对
数据
模块的引用,即使您多次导入它。

使用(使用Babel在捆绑前转换代码),您将能够将
数据
方法中的任何功能移动到自己的模块中(请记住,这可能意味着在一个模块导出中处理该方法的不同用法)

在其他文件中,您可以根据需要创建和引用新的实用程序函数

Babel将把
import
语句转换为
require()
表达式,Webpack将使用这些表达式来捆绑这些不同的模块进行分发。在这个捆绑包中,您将只看到一个对
数据
模块的引用,即使您多次导入它