我只能使用 .require() 来要求一个模块 - 有替代方案吗?

Posted

技术标签:

【中文标题】我只能使用 .require() 来要求一个模块 - 有替代方案吗?【英文标题】:I can only require a module using .require() - is there an alternative? 【发布时间】:2021-10-15 23:32:09 【问题描述】:

我已经制作了这个 npm 包:https://github.com/subgeniuscorp/secret-helper

我从主 index.ts 文件中导出一个对象,如下所示:

export default 
  generateSalt,
  createHash,
  generateApiKey,
  validateHash,
  generateRandomString,

这是我的 tsconfig.json 的样子:


  "compilerOptions": 
    "target": "es6",
    "module": "commonjs",
    "declaration": true,
    "declarationMap": true,
    "outDir": "./lib",
    "strict": true,
    "moduleResolution": "Node",
    "esModuleInterop": true
  ,
  "include": [
    "src"
  ],
  "exclude": [
    "node_modules",
    "test"
  ]

现在当我尝试在我的节点项目(即不是打字稿项目)中使用这个包时,我只能这样做:

const sh = require("@subgeniuscorp/secret-helper").default;

我做错了什么吗?如果没有.default 位,我能做些什么来要求这个项目?我试图了解我是否做错了什么,或者这两个模块是否是这样交互的。

【问题讨论】:

【参考方案1】:

您要查找的内容名为 export

export 
 generateSalt,
  createHash,
  generateApiKey,
  validateHash,
  generateRandomString,

然后你可以使用require这样导入它

const sh = require("@subgeniuscorp/secret-helper")

import

import * as sh from "@subgeniuscorp/secret-helper"

import 使用allowSyntheticDefaultImports 标志

import sh from "@subgeniuscorp/secret-helper"

【讨论】:

非常感谢,我完全没有想到

以上是关于我只能使用 .require() 来要求一个模块 - 有替代方案吗?的主要内容,如果未能解决你的问题,请参考以下文章

为什么NodeJS要求我使用下载模块的完整目录?

Dojo要求,模块加载失败时连接错误

RequireJs - 定义与要求

nodeJS proxyquire 覆盖 require 的特定功能

要求Modernizr使用Webpack

在离子框架中需要模块时出现问题[重复]