Snowflake-sdk:找不到模块:错误:无法解析“C:\projectname\node_modules\vm2\lib”中的“async_hooks”

sum*_*h13 4 javascript snowflake-cloud-data-platform cypress async-hooks cypress-task

我正在尝试将 Snowflake 集成到我的 Cypress 测试中,但它在编译时不断抛出错误。错误:

Error: Webpack Compilation Error
./node_modules/vm2/lib/resolver-compat.js
Module not found: Error: Can't resolve 'async_hooks' in 'C:\snowflake\node_modules\vm2\lib'
resolve 'async_hooks' in 'C:\snowflake\node_modules\vm2\lib'
  Parsed request is a module
  using description file: C:\snowflake\node_modules\vm2\package.json (relative path: ./lib)
    Field 'browser' doesn't contain a valid alias configuration
Run Code Online (Sandbox Code Playgroud)

尝试了以下简单步骤:

  1. 安装赛普拉斯
  2. 通过npm安装snowflake-sdk
  3. 创建一个规格文件并导入:
const snowflake = require("snowflake-sdk");

Run Code Online (Sandbox Code Playgroud)

当我运行规范文件时,出现上述错误。

如果我将错误跟踪到文件resolver-compat.js,我可以看到导入失败的地方。

    const {AsyncResource} = require('async_hooks');
Run Code Online (Sandbox Code Playgroud)

我已经手动完成了 npm installasync_hooks但也没有运气。

包.json

"devDependencies": {
    "cypress": "^11.2.0"
  },
  "dependencies": {
    "async_hooks": "^1.0.0",
    "snowflake-sdk": "^1.6.16"
  }
Run Code Online (Sandbox Code Playgroud)

Tes*_*ick 5

Snowflake-sdk 是一个 NodeJs 包,因此在 Cypress 中您需要通过任务与其交互。

这是取自 Snowflake 文档的基本连接任务。

赛普拉斯.config.js

const { defineConfig } = require("cypress");
var snowflake = require("snowflake-sdk");

let connectionId;

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      on("task", {
        snowflake: () => {
          var connection = snowflake.createConnection({
            account: "account",
            username: "user",
            password: "password",
            application: "application",
          });

          connection.connect(function (err, conn) {
            if (err) {
              console.error("Unable to connect: " + err.message);
            } else {
              console.log("Successfully connected to Snowflake.");
              // Optional: store the connection ID.
              connectionId = conn.getId();
            }
          })
          return null
        },
      });
    },
  },
})
Run Code Online (Sandbox Code Playgroud)

测试

it('Connect to snowflake', () => {
  cy.task('snowflake')
})
Run Code Online (Sandbox Code Playgroud)

如果没有正确的凭据,它会产生连接错误,但会证明该包正在工作。

无法连接:对 Snowflake 的请求失败。