如何在 Deno 中使用 node_modules 作为打字稿导入?

How to use node_modules in Deno as typescript imports?

项目:REST API 用于提供存储在 neo4j 图形数据库中的信息。 后端:Deno

我对 deno 很陌生,但我对 typescript 并不陌生,在 Angular 中经常使用它。

问题:我想使用一个驱动程序将我的 neo4j 数据库连接到我的后端,但是没有为 Deno 制作的 neo4j 驱动程序。我在互联网和文档中搜索了解决方案,并一直在尝试使用类似答案中建议的节点模块导入工具导入 javascript 库,并得到 deno 团队的支持。

本质上,我npm install neo4j-driver,然后将以下代码添加到我的 deno 项目中。

失败的解决方案:javascript 节点模块包装器

我在 server.ts 文件中调用此函数作为对我的 deno 服务器的测试。

我对 deno 使用的命令是:deno run --allow-all --unstable server.ts

neo4j_conn.ts 文件:(由 server.ts 调用)

import { createRequire } from "https://deno.land/std/node/module.ts";
const require = createRequire(import.meta.url);

export async function testconnection(uri: string, user: string, password: string) {

  //This is the line that fails. 
  var neo4j = require('neo4j-driver').v1;  //this fails whether or not I include the .v1 or not. 

  var driver = neo4j.driver(uri, neo4j.auth.basic(user, password))
  const session = driver.session()
  const personName = 'Alice'

  try {
    const result = await session.run(
      'CREATE (a:Person {name: $name}) RETURN a',
      { name: personName }
    )

    const singleRecord = result.records[0]
    const node = singleRecord.get(0)

    console.log(node.properties.name)
  } finally {
    await session.close()
  }

  await driver.close()

}

此returns以下错误:

error: Uncaught (in promise) Error: Cannot find module 'net'
Require stack:
- /mnt/c/Users/xxxxx/source/private_logic/deno-try/node_modules/neo4j-driver-bolt-connection/lib/channel/node/node-channel.js
- /mnt/c/Users/xxxxx/source/private_logic/deno-try/node_modules/neo4j-driver-bolt-connection/lib/channel/node/index.js       
- /mnt/c/Users/xxxxx/source/private_logic/deno-try/node_modules/neo4j-driver-bolt-connection/lib/channel/index.js
- /mnt/c/Users/xxxxx/source/private_logic/deno-try/node_modules/neo4j-driver-bolt-connection/lib/bolt/handshake.js
- /mnt/c/Users/xxxxx/source/private_logic/deno-try/node_modules/neo4j-driver-bolt-connection/lib/bolt/index.js
- /mnt/c/Users/xxxxx/source/private_logic/deno-try/node_modules/neo4j-driver-bolt-connection/lib/index.js
- /mnt/c/Users/xxxxx/source/private_logic/deno-try/node_modules/neo4j-driver/lib/index.js
- /mnt/c/Users/xxxxx/source/private_logic/deno-try/neo4jconn.ts
    at Function._resolveFilename (https://deno.land/std@0.97.0/node/module.ts:273:19)
    at Function._load (https://deno.land/std@0.97.0/node/module.ts:380:29)
    at Module.require (https://deno.land/std@0.97.0/node/module.ts:133:21)
    at require (https://deno.land/std@0.97.0/node/module.ts:1158:16)
    at Object.<anonymous> (file:///mnt/c/Users/xxxxx/source/private_logic/deno-try/node_modules/neo4j-driver-bolt-connection/lib/channel/node/node-channel.js:24:29)    
    at Module._compile (https://deno.land/std@0.97.0/node/module.ts:168:36)
    at Object.Module._extensions..js (https://deno.land/std@0.97.0/node/module.ts:1109:10)
    at Module.load (https://deno.land/std@0.97.0/node/module.ts:147:34)
    at Function._load (https://deno.land/std@0.97.0/node/module.ts:413:14)
    at Module.require (https://deno.land/std@0.97.0/node/module.ts:133:21)

据我所知,我所做的一切都是正确的,但在 typescript/js 模块翻译方面我有点不知所措。

我的文件结构如下:

package.json
package-lock.json
server.ts
neo4j_conn.ts
node_modules -|
              |
              :

Neo4j 开发人员 js 文档:https://neo4j.com/developer/javascript/

Deno 节点模块“需要”:https://doc.deno.land/https/deno.land/std@0.97.0/node/module.ts

如果您查看 std 中的 Node 兼容层自述文件,您会发现目前没有用于 net 库的兼容模块。兼容性会一天比一天好,但要考虑到 Deno 并不是 Node 的替代品,而是一个默认情况下不能与 Node 库一起使用的全新事物

https://deno.land/std@0.97.0/node