当前位置: 首页 > 知识库问答 >
问题:

无法在模块、Typescript、WebDrivero外部使用导入语句

陶健
2023-03-14

提前感谢您的帮助。

这个问题似乎已经在其他地方被提出和回答,但我相信我已经尝试了所有这些解决方案,但没有取得真正的进展。

我试图为webdriverIO创建一个自定义记者。然而,当所有导入都运行时,我得到以下错误:

无法在模块外使用导入语句

如果我试图执行wdio.conf文件顶部的导入语句,则会在导入WebdriverTestrasER行上出现上述错误。我可以通过使用要求来解决这个问题,但是在从@wdio/记者导入WDIOER的上从我的打字类执行导入时遇到了同样的错误。

当我尝试向包中添加“type”:“module”。json我收到一个新错误:

错误[ERR\U REQUIRE\U ESM]:必须使用导入加载ES模块:/Users/XXXXX/WebStormProject/integration\U test\u framework/wdio。conf.local。不支持ES模块的js require()。需要/Users/XXXXX/WebStormProject/integration\u test\u framework/wdio的()。conf.local。js来自/Users/XXXXX/WebstormProjects/integration\u test\u framework/node\u modules/@wdio/config/build/lib/ConfigParser。js是一个ES模块文件,因为它是一个。其最近父包的js文件。json包含“type”:“module”,它定义了所有。该包范围内的js文件作为ES模块。改名为wdio。conf.local。以js结尾。cjs,将所需代码更改为使用import(),或从/Users/n1531435/WebstormProjects/integration\u test\u framework/package中删除“type”:“module”。json。

使用cjs文件扩展名让我回到我开始时的导入错误。我不能更改需要的代码,因为它存在于WDIO ConfigParser中,而不是我的项目中。

我还玩了很多tsconfig中的值,包括目标值(es2015,es2017),似乎没有什么工作。有什么想法吗?

据我所知,这个设置中有4个相关文件。我已将它们复制如下:

  • wdio。conf.js

相关文件片段:

wdio。conf.js

//const WebdriverTestrailsReporter = require('./src/test/ui/WebdriverTestrailsReporter.js');
import WebdriverTestrailsReporter from './src/test/ui/WebdriverTestrailsReporter';

var isHeadless = process.env.HEADLESS === 'TRUE';
var useFirefox = process.env.USE_FIREFOX === 'TRUE';
var useChrome = process.env.USE_CHROME ? process.env.USE_CHROME === 'TRUE' : true;


exports.config = {
    reporters: ['spec', WebdriverTestrailsReporter]

package.json:

{
    "name": REDACTED
    "version": "1.1.0",
    "description": "",
    "main": "index.js",
    "bin": {
        REDACTED
    },
    "publishConfig": {
        "registry": "https://repo.forge.lmig.com/api/npm/npm-releases/"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "@wdio/allure-reporter": "^6.4.7",
        "@wdio/cli": "^6.4.5",
        "@wdio/local-runner": "^6.4.5",
        "@wdio/mocha-framework": "^6.4.0",
        "@wdio/sauce-service": "^6.4.6",
        "@wdio/spec-reporter": "^6.4.7",
        "@wdio/sync": "^6.4.5",
        "chromedriver": "^90.0.0",
        "fibers": "^5.0.0",
        "geckodriver": "^1.20.0",
        "husky": "^4.3.0",
        "mocha": "^8.1.1",
        "prettier": "^2.2.0",
        "selenium-webdriver": "^4.0.0-alpha.7",
        "wdio-chromedriver-service": "^6.0.4",
        "wdio-geckodriver-service": "^1.1.1"
    },
    "dependencies": {
        "@types/chai": "^4.2.12",
        "@types/es6-promise": "^3.3.0",
        "@types/mocha": "^8.0.2",
        "@types/node": "^14.11.5",
        "async": "^3.2.0",
        "axios": "^0.20.0",
        "chai": "^4.2.0",
        "date-fns": "^2.16.1",
        "execa": "^4.1.0",
        "graphql": "^15.3.0",
        "graphql-request": "^3.2.0",
        "mocha": "^8.1.1",
        "sleep": "^6.3.0",
        "ts-node": "^9.0.0",
        "typescript": "^4.1.2",
        "typings": "^2.1.1"
    },
    "husky": {
        "hooks": {
            "pre-push": "npm run tsc && npm run prettier"
        }
    }
}

记者(前两行,我们永远也过不了)

import WDIOReporter from '@wdio/reporter'
import { TestRailConfig } from '../TestRailConfig';

tsconfig:

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es6",
        "sourceMap": true,
        "skipLibCheck": true,
        "lib": ["es6"],
        "outDir": "lib",
        "types": ["node", "@wdio/sync", "@wdio/mocha-framework"]
    },
    "include": ["src/**/*"],
    "exclude": ["node_modules"]
}

共有1个答案

王季萌
2023-03-14

如果使用require,则使用该格式的所有内容;否则,如果要使用import,则添加模块类型并替换所有require以进行导入。

如果要在某些文件中使用require并在某些文件中导入,请将文件重命名为。具有require而不是的cjs。js。注意:不能在一个文件中混合使用ES6和通用js格式。您应该在该文件中使用require或import。

最佳实践是在使用typescript时使用E6,

 类似资料:
  • 我有一本书。节点js(07.10.19版本的node.js的最新版本)应用程序中的ts文件,带有导入节点模块而无默认导出。我使用这种结构:

  • 我有一个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:无法在模块外使用