Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – npm为自定义模块安装“没有这样的文件或目录’… / package.json’”大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些符号链接到node_modules的文件夹,以便能够将它们作为模块导入.例如,我有src / client / apps / admin目录,它与node_modules / @ admin符号链接.但是当我尝试安装或删除任何模块时,npm给了我这些警告

$npm i -S connect-roles
...

npm WARN ENOENT ENOENT: no such file or directory,open '/Users/Admin/Code/www/learn/src/client/apps/admin/assets/package.json'
npm WARN ENOENT ENOENT: no such file or directory,open '/Users/Admin/Code/www/learn/src/client/apps/admin/components/package.json'
npm WARN ENOENT ENOENT: no such file or directory,open '/Users/Admin/Code/www/learn/src/client/apps/admin/reducers/package.json'
npm WARN ENOENT ENOENT: no such file or directory,open '/Users/Admin/Code/www/learn/src/client/apps/admin/package.json'

当然,我可以将package.json添加到每个这样的文件夹,但我不想.必须有另一种更好的方法来做到这一点.在那儿?

PS:npm v3.5.3

解决方法

您试图以一种必然会导致您出现问题的方式使用节点模块require / import.以一种不使用这些符号链接的方式构建项目会好得多.

导入模块时,您可以指定核心模块,项目node_modules中安装的模块或相对路径:

核心模块(例如require(‘http’))
核心模块作为节点的一部分包含在内,只需按名称导入即可.

已安装的模块(例如require(‘bluebird’))
已经通过npm安装并位于项目_node_modules_目录中的模块可以使用其package.json中声明的名称进行安装.

相对路径(例如require(‘../ setTings / menu’))
可以使用相对于导入文件的路径导入模块(可以是没有包定义的单个文件).

因为你没有提供package.json,所以npm失败了,因为它无法查找每个包的name属性.如果您只是使用相对路径来要求这些文件,那么您会好得多.

例如,如果您的项目看起来像:

apps  
│
└───admin
    │   assets.js
    │   components.js
    |   reducers.js
    │
    ├───subfolder
    │   │   thing.js

您可以使用相对路径将一个文件导入另一个文件.

例如,在components.js中:

require(‘./assets’)

或者在thing.js中:

要求(‘../assets’)

如果你有很多非常嵌套的路径,这可能会变得有点麻烦,但有许多建议的方法可以处理.一种方法是使用path.resolve(),它将在给定项目路径的路径的情况下解析相对路径.

例如:

要求(‘../assets’)

可以重写为

require(path.resolve(‘app / admin / assets’))

这样您的所有需求路径都可以从项目根目录中获得“绝对”.

您可以在Better local require() paths for Node js中阅读更多建议的处理方法

大佬总结

以上是大佬教程为你收集整理的node.js – npm为自定义模块安装“没有这样的文件或目录’… / package.json’”全部内容,希望文章能够帮你解决node.js – npm为自定义模块安装“没有这样的文件或目录’… / package.json’”所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。