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”导入一些模块这样的麻烦。谢谢链接!我会尝试其中一个建议,这可能是我一直在寻找的。希望它能解决我的问题。再次感谢!