babel 7 在使用 typescript 插件汇总时不转译

babel 7 not transpiling when used in rollup with typescript plugin

我似乎无法让 rollup-plugin-babel 在我的打字稿项目中工作。 .ts 代码编译和汇总包,生成映射文件但 babel 不转译它。

此外,如果我 运行 npx babel lab.js --out-file lab-es5.js babel 似乎工作得很好。

这是我的rollup.config.js

import commonjs from 'rollup-plugin-commonjs';
import nodeResolve from 'rollup-plugin-node-resolve';
import typescript from 'rollup-plugin-typescript2'
import sourcemaps from 'rollup-plugin-sourcemaps';
import babel from 'rollup-plugin-babel';

var plugins = [
    nodeResolve({
        module: true,
        jsnext: true,
        main: true,
        preferBuiltins: false
    }),
    commonjs({
        include: 'node_modules/**',  // Default: undefined
        ignoreGlobal: false,  // Default: false
    }),
    typescript(/*{ plugin options }*/),
    babel({
        exclude: 'node_modules/**',
        runtimeHelpers: true
    }),
    sourcemaps()
];

export default [
    {
        input: 'src/lab.ts',
        plugins,
        output: {
            name: "TablePager",
            file: 'lab.js',
            format: 'iife',
            sourcemap: true
        }
    }
];

这是我的 .babelrc

{
    "presets": ["@babel/preset-env"]
}

如果您对我做错了什么有任何线索,我将不胜感激。

你的 .babelrc 不见了 @babel/preset-typescript。尝试安装包并将其添加到配置中:

{
    "presets": [
        "@babel/preset-env",
        "@babel/preset-typescript"
    ]
}

查看 Microsoft 的 TypeScript-Babel-Starter 和汇总部分。

import commonjs from 'rollup-plugin-commonjs';
import resolve from 'rollup-plugin-node-resolve';
import babel from 'rollup-plugin-babel';
import pkg from './package.json';

const extensions = [
  '.js', '.jsx', '.ts', '.tsx',
];

const name = 'RollupTypeScriptBabel';

export default {
  input: './src/index.ts',

  // Specify here external modules which you don't want to include in your bundle (for instance: 'lodash', 'moment' etc.)
  // https://rollupjs.org/guide/en#external-e-external
  external: [],

  plugins: [
    // Allows node_modules resolution
    resolve({ extensions }),

    // Allow bundling cjs modules. Rollup doesn't understand cjs
    commonjs(),

    // Compile TypeScript/JavaScript files
    babel({ extensions, include: ['src/**/*'] }),
  ],

  output: [{
    file: pkg.main,
    format: 'cjs',
  }, {
    file: pkg.module,
    format: 'es',
  }, {
    file: pkg.browser,
    format: 'iife',
    name,

    // https://rollupjs.org/guide/en#output-globals-g-globals
    globals: {},
  }],
};

.babelrc

{
  "presets": [
    "@babel/env",
    "@babel/typescript"
  ],
  "plugins": [
    "@babel/proposal-class-properties",
    "@babel/proposal-object-rest-spread"
  ]
}

解释

默认情况下,@rollup/plugin-babel 启用了以下扩展程序:

.js
.jsx
.es6
.es
.mjs

因此,在使用 @rollup/plugin-babel@rollup/plugin-typescript 时,有两件事需要设置。

  1. 您必须告诉它使用 TypeScript 扩展(默认情况下未启用)。
  2. 您必须告诉它您要转译哪些文件。

由于某些原因,文档说默认情况下,所有文件都会被转译。对于具有 TypeScript 扩展名的文件,情况并非如此。所以你必须手动设置 include 选项。

幸运的是,对于第二个选项,您可以告诉它使用 glob 模式。设置文件夹无效。

例子

这是一个例子。在此上下文中,所有要转译的 TypeScript 文件都在 src 文件夹中。

"use strict";

import babel from "@rollup/plugin-babel";
import typescript from "@rollup/plugin-typescript";

import { resolve } from "path";

export default {
    plugins: [
        typescript(),
        babel({
            extensions: [".ts"],
            include: resolve("src", "**", "*.ts")
        })
    ];
};

链接