Typescript Rollupjs模块没有';t注册其模块

Typescript Rollupjs模块没有';t注册其模块,typescript,gulp,amd,rollupjs,Typescript,Gulp,Amd,Rollupjs,我有一个gulp任务,它运行汇总、编译typescript并生成用于动态导入的模块: const rollup = require('rollup'); const rolltypescript = require('rollup-plugin-typescript'); const babel = require('rollup-plugin-babel'); const resolve = require('rollup-plugin-node-resolve'); const common

我有一个gulp任务,它运行汇总、编译typescript并生成用于动态导入的模块:

const rollup = require('rollup');
const rolltypescript = require('rollup-plugin-typescript');
const babel = require('rollup-plugin-babel');
const resolve = require('rollup-plugin-node-resolve');
const commonjs = require('rollup-plugin-commonjs');
const omt = require('@surma/rollup-plugin-off-main-thread');

function typescript() {
  return rollup.rollup({
    input: 'app/scripts/main.ts',
    plugins: [
      omt(),
      rolltypescript(),
      resolve(),
      commonjs(),
      babel({
        babelrc: false,
        presets: [['@babel/preset-env', { modules: false }]],
        plugins: ['@babel/plugin-syntax-dynamic-import']
      })
    ]
  }).then(bundle => {
    return bundle.write({
      dir: '.tmp/scripts/output',
      format: 'amd',
      name: 'library',
      sourcemap: true
    }).then(() => {
      return src('.tmp/scripts/output/main.js') // I did this because the path output was wrong. See: https://github.com/rollup/rollup/issues/2463
        .pipe($.replace(/require\(\['\.\//g, `require(['./scripts/output/`))
        .pipe(dest('.tmp/scripts'))
        .pipe(server.reload({ stream: true }));
    });
  });
};
此任务正确生成所有文件,但我在浏览器控制台中收到错误

main.js:36 Uncaught (in promise) Error: Module ./scripts/output/file-0d52c3ae.js didn’t register its module
at singleRequire (main.js:36)
at async Promise.all (:9000/index 0)
at async require (main.js:43)

我不确定现在应该做什么来修复错误。

我已经通过以下程序解决了问题:

在HTML中,我完成了以下操作:

<script src="/node_modules/shimport/index.js" data-main="scripts/lib/main.js"></script>
现在,使用esNext编译所有文件并将其放入
/scripts/builder/
文件夹中,因此所有导入都不会被触及。然后rollupjs将转换文件,以便动态导入并与babel兼容

最后,我删除了
/scripts/builder/
文件夹,因为它仅用于创建新的有效文件,我将三个文件作为一个系列执行:

// example
watch('app/scripts/**/*.ts', series(typescript, buildLib, scripts));
watch(['app/scripts/**/*.js', '!app/scripts/builder/**/*.js'], series(buildLib, scripts));
希望我曾经帮助过一些人,如果你想让这段代码变得更好,我真的很乐意:)

谢谢

// example
watch('app/scripts/**/*.ts', series(typescript, buildLib, scripts));
watch(['app/scripts/**/*.js', '!app/scripts/builder/**/*.js'], series(buildLib, scripts));