我有一本书。节点js(07.10.19版本的node.js的最新版本)应用程序中的ts文件,带有导入节点模块而无默认导出。我使用这种结构:import{Class}来自'abc'
运行代码时,出现以下错误:
无法在模块外部使用导入语句
。
在网络中,我看到了许多解决这个问题的方法(for.js),但这对我没有帮助,可能是因为我有一个typescript文件。这是我的密码:
import { Class } from 'abc';
module.exports = { ...
execute(a : Class ,args : Array<string>){ ...
这是我的tsconfig.json:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true
}
}
我也有类似的问题。我必须安装nodemon,并且总是通过nodemon索引启动脚本。ts
yarn add -D nodemon
package.json
"scripts": {
"start": "nodemon index.ts"
}
或从命令行指定文件
package.json
"scripts": {
"nodemon": "nodemon $1"
}
确保您的包中的
指向已编译的“main”
字段。json索引。js
而不是索引。ts
向包中添加“类型”:“模块”
。json将告诉Node您正在使用ES2015模块,这将消除错误,但是您需要告诉Typescript通过在tsconfig中设置“模块”:“ES2015”
,而不是“commonjs”
,来生成这种类型的模块。json。
但是,这会导致当前代码出现问题,因为尽管您使用的是ES6import{}
语句,但您是使用commonJS模块导出的。exports={}
语法,节点的ES模块加载程序将出现问题。有两种处理方法:
模块。导出
,但通过给它一个。cjs分机
export function execute(…)
第一个选项可能有点棘手,因为编译器将输出。js文件,您必须将其更改为。一直都是cjs(据我所知)。使用第二个选项,您应该能够运行带有节点的文件(包括版本的--experimental modules标志)
如果您绝对需要使用公共JS,也许最好安装节点的类型定义:@类型/节点,并将导入更改为公共JS格式:
需要('abc')
,并保持其余设置不变(尽管您可以添加type:package.json是明确的)。
提前感谢您的帮助。 这个问题似乎已经在其他地方被提出和回答,但我相信我已经尝试了所有这些解决方案,但没有取得真正的进展。 我试图为webdriverIO创建一个自定义记者。然而,当所有导入都运行时,我得到以下错误: 无法在模块外使用导入语句 如果我试图执行文件顶部的导入语句,则会在导入WebdriverTestrasER行上出现上述错误。我可以通过使用要求来解决这个问题,但是在从@wdio/记者导
我有一个ApolloServer项目给我带来了麻烦,所以我想我可能会更新它,并在使用最新的巴别塔时遇到问题。我的“index.js”是: 当我运行它时,我得到了错误 首先,我试图做一些事情来说服TPTB*这是一个模块(没有成功)。所以我把“导入”改成了“要求”,这就奏效了。 但是现在我在其他文件中有大约24个“导入”给我同样的错误。 *我确信我的问题的根源是我甚至不确定是什么在抱怨这个问题。我有点
试图将用户模型中的“uuid”作为
我得到了这个错误时,试图从另一个javascript文件导入。这是我第一次尝试这样的东西。主文件是,模块文件是。 main.js: 摩登派青年js: 我怎样才能解决这个问题?谢谢
在测试其中一个功能时,我遇到了这种错误。到底是什么问题? /用户/user/websprojects/hsu/src/path finding/path finding。spec.js:1从'chai'导入{expect}^^^^^^ 语法错误:无法在WrapSafe(节点:内部/模块/cjs/加载器: 1018:16)的模块外使用导入语句。_compile(节点:内部/模块/cjs/加载器: 1
当依赖项未声明为模块时,如何从依赖项中解析“不能在模块外使用导入语句”? 我想使用Svelte/kit中的验证器来验证电子邮件。但是,在导入ESM版本时,出现“无法在模块外使用导入语句”错误。我用pnpm代替npm或纱线。 验证器似乎正在尝试使用import语句,但它是一个包。json没有指定。我猜这是错误的根本原因。 包裹。json具有“类型”:“模块” SyntaxError:无法在模块外使用