簡體   English   中英

Cypress Gitlab ci/cd 不能在模塊外使用 import 語句

[英]Cypress Gitlab ci/cd cannot use import statement outside a module

嘿,我的 cypress 項目寫在 typescript 中,項目結構如下所示

/tests
  /e2e
    /cypress
      /fixtures
      /integration
      /plugins
      ...
    package.json
    tsconfig.json

我的tsconfig.json文件

{
  "compilerOptions": {
    "target": "es6",
    "lib": ["es6", "dom"],
    "types": ["cypress", "node", "reflect-metadata"],
    "module": "commonjs",
    "moduleResolution": "node",
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "baseUrl": "."
  },
  "include": ["**/*.ts", "cypress/support/index.js", "plugins/index.js"]
}

我的package.json文件中沒有"type": "module"屬性。 每當我使用 gitlab 管道運行我的代碼時,我都會收到以下錯誤

import "dotenv/config";
^^^^^^
SyntaxError: Cannot use import statement outside a module

我知道有很多類似的問題,但我覺得我檢查了所有問題,但沒有找到任何答案。 有誰知道我可以改變什么?

該文件必須是 ES 模塊才能使用導入導出語法。 正如您提到的,您在 package.json 中輸入了 commonjs,它將把 all.ts 文件視為腳本。 要將文件聲明為模塊,您有兩種選擇

  • 在您的 package.json 中使用 type: module,默認情況下會將 all.ts 文件視為 ES 模塊。
  • 如果您只想將特定文件視為模塊,您可以為這些文件使用 .mts 擴展名

Cypress 文檔Types for plugins有點誤導,顯示module.exports = (on, config) => {}但這會導致編譯器投訴。

cypress-real-world-app 有

import * as dotenv from "dotenv";

dotenv.config({ path: ".env.local" });
dotenv.config();

const awsConfig = require(path.join(__dirname, "../../aws-exports-es5.js"));

export default (on, config) => {
  config.env.defaultPassword = process.env.SEED_DEFAULT_USER_PASSWORD;

一般來說,任何有導出的東西都是一個模塊,所以如果你沒有什么可導出的,添加export {}作為一個快速的技巧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM