如何解决告诉npm软件包从安装它的项目根节点node_modules导入
我创建了一个npm软件包,我想将其安装在另一个项目中。
所以我进入项目的根文件夹并执行
npm install /path/to/package/folder
它正确安装了它(根据文档创建了符号链接),我可以使用它,并将其作为经典的node_module导入。
我的问题是我创建的程序包中的相对导入。该软件包依赖于其他库和相对的node_modules文件夹。
碰巧我包中的文件是从相对的node_modules文件夹而不是项目根node_modules文件夹导入的。 如果我在根项目文件夹中安装了依赖项,那么我也可以在程序包的嵌套node_modules中找到它。复制它,并从我的包中相对导入,从嵌套的包中导入。这给我带来了一些问题。我该如何正确配置?
这里有一个草图试图阐明:
my_project
|
|
__ node_modules (root)
|
|
my_package (in this case symlink to my package)
| |
| |
| |__node_modules (nested) <-------
| | |
| | |
| | |__ third_package
| |
| |
| |__ dist
| |
| |
| __ lib
| |
| |
| |__ index.js
|
|
|___ third_package
index.js
从嵌套的node_modules而不是root导入thied_package文件。
我的打包文件用babel编译成dist / lib
谢谢。
此处为包,my_package的json
{
"name": "my_package","version": "1.0.0","description": "","main": "lib/index.js","scripts": {
"test": "echo \"Error: no test specified\" && exit 1","build": "./node_modules/.bin/babel src --out-dir lib --copy-files",},"keywords": [
],"author": "","license": "ISC","dependencies": {
"@babel/cli": "^7.10.5","@babel/core": "^7.11.4","@babel/preset-env": "^7.11.0","@babel/preset-react": "^7.10.4","@fortawesome/fontawesome-free": "^5.14.0","@fortawesome/fontawesome-svg-core": "^1.2.30","@fortawesome/free-brands-svg-icons": "^5.14.0","@fortawesome/free-regular-svg-icons": "^5.14.0","@fortawesome/free-solid-svg-icons": "^5.14.0","@fortawesome/react-fontawesome": "^0.1.11","leaflet": "^1.6.0","react": "^16.13.1","react-dom": "^16.13.1","react-leaflet": "^2.7.0"
},"peerDependencies": {
"react": "^16.13.1","react-leaflet": "^2.7.0","leaflet": "^1.6.0"
},"devDependencies": {
"babel-eslint": "^10.1.0",}
}
解决方法
进行更多研究后,
根据npm installing algorithm,当我安装我的软件包时,它将安装在package.json文件中列出的所有依赖关系,最靠近node_modules树的顶部。
在我的情况下,出现问题的原因是嵌套在我的包中的third_package和项目根node_modules文件夹中的third_package具有不同的版本。所以显然两个都安装了。
实际上,如loading from node_modules folder中所述,节点导入算法在更嵌套的node_modules文件夹中搜索已导入/所需的包,如果找不到,则该包将继续到项目的根目录。直到找到它。
在我的情况下,我的软件包导入的第三个软件包文件位于其本地的node_modules文件夹中。
要避免这种行为,可以使用其他解决方案:
是否有可能探索它们以定义自定义导入行为。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。