npm 是否有方法包括文件从例如,package.json父目录?

jxct1oxe  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(144)

我希望能够安装本地模块(下面称为myLibModule1/myLibModule2/),这些模块需要访问lib/目录中的某些dll文件。
我尝试使用package.json文件上的files属性来包含lib1.dlllib2.dlllib3.dll,以避免通过npm install <path to local module>命令安装。
但是,看起来npm install <path to local module>只是将整个目录复制到node_modules文件夹中,而不排除任何子文件夹。
我甚至尝试将package.json添加到lib/文件夹中,然后将该文件夹用作模块的依赖项。然而,这不仅将lib中的所有文件复制到我的node_modules中,还将所有lib子文件夹复制到我的node_modules中,这会导致冗余数据。

lib/
├── myLibModule1/
│   ├── package.json
│   └── index.js
├── myLibModule2/
│   ├── package.json
│   └── index.js
├── lib1.dll
├── lib2.dll
├── lib3.dll
├── .
├── .
├── .
└── libn.dll

所以在package.json中我尝试了:

"files": [
 "../lib1.dll",
 "../lib2.dll",
 "../lib3.dll"
]

在最好的情况下,我希望开发人员在node_modules文件夹中有一个模块,最后看起来像这样:

myLibModule1/
├── package.json
├── index.js
├── lib1.dll
├── lib2.dll
└── lib3.dll
f87krz0w

f87krz0w1#

我还尝试在npmworkspace中发布一些来自父/根包的文件。但是,像"files": ["../someFile"]这样的父文件夹引用确实不起作用。

解决方案

在父包中定义一个额外的script,以将所需文件复制到子工作区。
示例(假设每个子/工作区都有一些dist子目录,在.gitignore中忽略了该子目录,并且最终将包含可打包的文件:
package.json

{
  //...
  "scripts": {
    "copy_files": "for dir in lib/*; do cp *.dll \"$dir/dist/\"; done",
  }
}

儿童package.json

{
  //...
  "files": {
    "dist/"
  }
}

最后要做的事:在某个时候调用copy_files脚本,例如在构建父级时。
注意:copy_files中的shell for循环引用带有转义双引号的子目录,以避免在工作区文件夹中包含空格的情况下(尽管不太可能)出现错误。

相关问题