Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js npm安装“;没有这样的文件或目录'/package.json'&引用;用于自定义模块_Node.js_Npm - Fatal编程技术网

Node.js npm安装“;没有这样的文件或目录'/package.json'&引用;用于自定义模块

Node.js npm安装“;没有这样的文件或目录'/package.json'&引用;用于自定义模块,node.js,npm,Node.js,Npm,我有一些文件夹符号链接到node\u模块,以便能够将它们作为模块导入。例如,我有src/client/apps/admin目录,该目录符号链接到node\u 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/app

我有一些文件夹符号链接到
node\u模块
,以便能够
将它们作为模块导入。例如,我有
src/client/apps/admin
目录,该目录符号链接到
node\u 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

尝试以下命令:

npm install -g npm-autoinit

您正试图使用节点模块
require
/
import
,这种方式以后肯定会给您带来问题。以一种不使用这些符号链接的方式构建项目会更好

导入模块时,可以指定核心模块、安装在项目节点\u模块内的模块或相对路径:

核心模块(例如
需要('http')

核心模块作为节点的一部分包含,只需输入名称即可

已安装的模块(例如
需要('bluebird')

通过
npm
安装的模块,以及位于项目\u节点\u模块\u目录中的模块,可以使用其
包.json
中声明的名称进行安装

相对路径(例如
需要('../settings/menu')

可以使用导入文件的相对路径导入模块(可以是没有包定义的单个文件)

由于您没有提供
package.json
,npm将失败,因为它无法查找每个包的
name
属性。如果您只需要使用相对路径来获取这些文件,您的境况会好得多

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

apps  
│
└───admin
    │   assets.js
    │   components.js
    |   reducers.js
    │
    ├───subfolder
    │   │   thing.js
可以使用相对路径将一个文件导入到另一个文件

例如,在
components.js中:

require('./assets')

或者在
thing.js
中:

require('../assets')

如果有很多嵌套路径,这可能会变得有点麻烦,但是有很多建议的方法可以解决这个问题。一种方法是使用
path.resolve()
,它将解析相对路径,给定项目路线的路径

例如:

require('../assets')

可以重写为

require(path.resolve('app/admin/assets'))

这有一个很好的结果,您的所有require路径都是从项目根“绝对”的


你可以在

中阅读更多建议的解决方法。没有一个答案能帮助我解决这个问题,因此我创建了自己的软件包,这是我的灵感来源。此软件包允许注册目录别名,以便在
require
/
import
中进一步使用

例如:

const moduleAlias = require('module-alias')

moduleAlias.addAliases({
  '@root'  : __dirname,
  '@server': __dirname + '/src/server'
})

const someModule = require('@server/some-module')

阅读自述文件了解更多示例

感谢您的回复。当然,我知道我可以使用相对路径。但是我的项目越来越大,有很多子文件夹,所以我厌倦了像从“../../../../../../../../../../../../some模块”
或从“../../../../../../client/apps/admin/components/pages/some pages”导入一些模块这样的麻烦。谢谢链接!我会尝试其中一个建议,这可能是我一直在寻找的。希望它能解决我的问题。再次感谢!