尝试从导出 Typescript 的私有库导入组件时,我们收到以下错误消息:
Module parse failed: Unexpected token (82:7)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
|
| // Types
> export type {
我尝试在 tsconfig 文件中显式包含库节点模块:
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx",
"node_modules/@private-lib/*.*"
],
"exclude": [""]
但不幸的是,没有用。似乎有可能改变 next.js 的 webpack 配置,但试图只推入一个Typescript加载器没有工作,不幸的是:
module.exports = {
webpack: (config, options) => {
config.module.rules.push({
test: /\.(ts|js)x?$/,
use: [
options.defaultLoaders.babel,
{
loader: "ts-loader",
options: {
transpileOnly: true,
experimentalWatchApi: true,
onlyCompileBundledFiles: true,
},
},
],
});
return config;
},
};
它会产生以下错误:
./node_modules/process/browser.js
TypeError: /home/blub/bla/website/node_modules/process/browser.js: Property left of AssignmentExpression expected node to be of a type ["LVal"] but instead got "BooleanLiteral"
那么有没有人也面临过这个问题,可以给我指出正确的方向?这里似乎有很多魔法在起作用,我有点迷失了方向。
3条答案
按热度按时间w51jfk4q1#
在遇到看起来像是同一个问题后,我提出了这个问题:带有 typescript 的next.js项目(
yarn create next-app --typescript
)。对我来说,这发生在从一个
tsx
文件(项目内部)中包含一个ts
包(next.js项目外部)之后,看起来幕后有魔法,并试图将ts文件解析为某个版本的普通js。我的问题已由next-transpile-modules(^9.0.0)解决。具体来说,假设您:
next.config.js
是这样开始的1.有外部TS库
private-lib
,其中来自某处tsx文件的import { ... } from '/path/to/private-lib'
导致编译时错误。固定:
yarn add next-transpile-modules
yarn add file:/path/to/private-lib
1.更改
private-lib
的ts/tsx文件中的import语句1.将
next.config.js
更新为如下所示YMMV、HTH、#使用更多魔法修复魔法
kyks70gy2#
我猜这个问题是从与
ts-loader
传输jsx?
文件,所以它是安全的,只是只传输tsx?
文件的情况下ts-loadder
:还有一件事,如果您的存储库现在使用
jsx?
文件,这意味着在jsx?
文件中导入tsx?
文件,您可能需要在tsconfig.json
中启用{ "allowJs": true }
ccrfmcuu3#
这个问题有点老了,所以我想我应该发布一个更新来扩展 directed-laugh 的原始答案,以帮助任何偶然发现这个问题的人。
如前所述,通过
next.config.js
传输模块似乎是一种解决方案,尽管在NextJS 13.1中不需要安装额外的next-transpile-modules
包,因为这些特性在NextJS 13.1中是本机可用的。在
next.config.js
中,只需添加transpilePackages
选项并包含ts
包的名称。参见模块翻译