创建模块化 npm 包

问题描述 投票:0回答:1

我正在做一些类似查询的事情,并且能够使其能够使用任何模块,如mysql、mssql等来支持我的工作,如果可能的话,将其共享到npm库。

目前,我必须安装所有这些,最后我得到了一堆

mysql2
mssql
tedious
pgsql
。他们占用了大量不必要的资源。

但是,尽管我已经安装了

easy-query-mysql
,例如,在我的应用程序中与
easy-query
一起安装,
easy-query
仍然无法导入它。也许nodejs方面有一些隔离。

我尝试让它尝试像

easy-query-mysql
一样导入,如果找不到适配器则跳过适配器。所以它是这样的:

app
|- node_modules
|  |- easy-query
|  |  |- index.js
|  |- easy-query-mysql
|- index.js

/app/index.js

const query = await EasyQuery.connect('mysql://user:pass@localhost/database');

/app/node_modules/easy-query/index.js

const adapter = await import('easy-query-mysql`)

产量

ERR_MODULE_NOT_FOUND
import('easy-query-mysql')

我想知道,是否可以让用户只安装他们需要的模块?例如,假设我的包是

easy-query
,但它没有附带任何模块。然后,如果用户将
easy-query\mysql
添加到他们的项目中,例如使用
npm i easy-query easy-query\mysql
之类的内容,那么
easy-query
将能够接受像
mysql://dbuser:passwd@localhost/database
这样的连接。如果用户添加
easy-query\mssql
,那么用户将能够连接到
mssql://dbuser:passwd@localhost/database
,依此类推

如果可能的话,如何构建我的项目才能做到这一点?我可以阅读有关如何执行此操作的任何资源吗?

node.js npm
1个回答
0
投票

您可以在 package.json 的

peerDependencies
中添加额外的软件包,并在
peerDependenciesMeta
部分将它们添加为可选,这样它就不会自动安装它们。

"peerDependencies": { 
"easy-query-mysql": ">= 1.0.0"
},
"peerDependenciesMeta": {
  "easy-query-mysql": {
    "optional": true
  }
}

您无法控制将安装哪个版本,因此不要指定确切的版本,而是根据您的支持使用逻辑操作。
在您的代码中,您需要处理不同的可选情况。

let easy-query-mysql;
try {
  easy-query-mysql = await import('easy-query-mysql')
} catch (er) {
  easy-query-mysql = null;
}

if (easy-query-mysql) {
  // Whatever you want 
}
© www.soinside.com 2019 - 2024. All rights reserved.