npm 尝试将节点模块导入NuxtJS TypeScript时出错(ES2018)

plupiseo  于 2023-01-26  发布在  TypeScript
关注(0)|答案(2)|浏览(200)

我尝试导入chess.js模块,如下所示:
import Chess from 'chess.js';
在本地加载应用程序时,这会给我带来以下错误:
require() of ES Module .../app/node_modules/chess.js/chess.js from .../app/node_modules/vue-server-renderer/build.dev.js not supported. Instead change the require of chess.js in .../app/node_modules/vue-server-renderer/build.dev.js to a dynamic import() which is available in all CommonJS modules.
我已经在使用import语句,而不是require。我尝试了不同的方法来导入模块,但是没有任何效果。我知道这是由于在创建NuxtJS应用程序时使用TypeScript造成的。我目前正在尝试将chess.js模块导入. js文件,而不是. ts文件,这里有些东西被翻译错了。
有什么想法吗?
这是我的配置文件:

{
  "compilerOptions": {
    "target": "ES2018",
    "module": "ESNext",
    "moduleResolution": "Node",
    "lib": [
      "ESNext",
      "ESNext.AsyncIterable",
      "DOM"
    ],
    "esModuleInterop": true,
    "allowJs": true,
    "sourceMap": true,
    "strict": true,
    "noEmit": true,
    "experimentalDecorators": true,
    "baseUrl": ".",
    "paths": {
      "~/*": [
        "./*"
      ],
      "@/*": [
        "./*"
      ]
    },
    "types": [
      "@nuxt/types",
      "@nuxtjs/axios",
      "@types/node"
    ]
  },
  "exclude": [
    "node_modules",
    ".nuxt",
    "dist"
  ]
}
    • UPDATE**将. js文件转换为. ts并运行'npm i--save-dev@types/chess.js'就可以了,但我仍然想知道是否有办法让原始的JS脚本工作。
wlsrxk51

wlsrxk511#

您可以尝试将import()函数与JavaScript结合使用。
您需要按照以下步骤来完成它。
1.从package.json中删除以下行。

{
  "type": "module"
}

1.请将import语句更改为下面的语句。确保您使用的是LTS版本的Node.js,因为旧版本不支持顶级await

const chess = await import("chess.js");

这应该会删 debugging 误,同时还允许您使用JavaScript。

quhf5bfb

quhf5bfb2#

我构建的一个模块也有同样的问题。
解决方案来自这里:https://nuxt.com/docs/guide/concepts/esm#es-modules
我将NPM包添加到nuxt.config中,如下所示:

//nuxt.config.ts

export default defineNuxtConfig({
    build: {
        transpile: ['@module/name'],
    }
})

相关问题