我有一些符号链接到node_modules
的文件夹,以便能够import
将它们作为模块。例如,我有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
答案 0 :(得分:2)
您正试图以某种方式使用节点模块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
:
require ('../assets')
如果你有很多非常嵌套的路径,这可能会变得有点麻烦,但有许多建议的方法可以处理。一种方法是使用path.resolve()
,它将解决相对路径,给定项目路径的路径。
例如:
require ('../assets')
可以重写为
require (path.resolve('app/admin/assets'))
所有需求路径都是项目根目录中的“绝对”结果。
中阅读更多建议的处理方法答案 1 :(得分:-1)
这些答案都没有帮助我解决问题所以我创建了自己的包module-alias,其灵感来自app-module-path
。此软件包允许注册目录别名,以便require
/ import
进一步使用。
示例:
const moduleAlias = require('module-alias')
moduleAlias.addAliases({
'@root' : __dirname,
'@server': __dirname + '/src/server'
})
const someModule = require('@server/some-module')
阅读自述文件以获取更多示例
答案 2 :(得分:-2)
尝试此命令:
npm install -g npm-autoinit