首页 > 解决方案 > 为什么 Rollup 试图将我的依赖项的 TypeScript 解析为 JavaScript?

问题描述

我在这里有示例代码:https ://github.com/thejohnfreeman/bugs/commit/b4ff15a670691ada024589693d22f4fd0abae08d

parent是一个用 TypeScript 编写的模块,主要是类型声明。其中的types字段package.json指向其源 TypeScript 入口点,该main字段指向其编译后的 JavaScript 入口点。它的脚本tsconfig.json使用了一个。build

child是一个用 TypeScript 编写的模块,它依赖于parent. 它有一个tsconfig.json并且想用 Rollup 构建一个包。

设置后:

cd child
yarn

这有效:

npx tsc --project tsconfig.json --outDir out --module esnext

它产生预期的输出out/index.js

import parent from 'parent';
console.log(parent);

(这与源 TypeScript 完全相同,但这只是巧合。)

这不起作用:

npx rollup --config

错误是这样的:

src/index.ts → dist/index.js...
[!] Error: Unexpected token (Note that you need plugins to import files that are not JavaScript)
node_modules/parent/src/internal/index.ts (1:12)
1: import type Parent from './Parent'
               ^
2: declare const parent: Parent
3: export default parent
Error: Unexpected token (Note that you need plugins to import files that are not JavaScript)
    at error (node_modules/rollup/dist/shared/rollup.js:5309:30)
    at Module.error (node_modules/rollup/dist/shared/rollup.js:9765:16)
    at Module.tryParse (node_modules/rollup/dist/shared/rollup.js:10169:25)
    at Module.setSource (node_modules/rollup/dist/shared/rollup.js:10068:24)
    at ModuleLoader.addModuleSource (node_modules/rollup/dist/shared/rollup.js:18451:20)
    at async ModuleLoader.fetchModule (node_modules/rollup/dist/shared/rollup.js:18507:9)
    at async Promise.all (index 0)
    at async ModuleLoader.fetchStaticDependencies (node_modules/rollup/dist/shared/rollup.js:18533:34)
    at async Promise.all (index 0)
    at async ModuleLoader.fetchModule (node_modules/rollup/dist/shared/rollup.js:18509:9)

我怀疑 Rollup 成功地将child模块编译为包含 line 的 ESNext 模块import parent from 'parent',而不是将模块说明符解析为父模块中的JavaScript,而是将其解析为 TypeScript,其中包含无效的 JavaScript 行( import type Parent from './Parent')。那是问题吗?我该如何解决?

标签: typescriptes6-modulesrolluprollupjs

解决方案


这似乎是 Rollup 长期存在的众所周知的问题。对我有用的解决方法(感谢@frederikhors 和@mike-hogan!)是更改child/tsconfig.json以添加"node_modules/parent"include列表中。我不愿将其称为解决方案,因为我不应该在该列表中重复我所有的 TypeScript 依赖项,但至少我没有被阻止。


推荐阅读