TL;DR如何在模块化node.js
项目中配置不同的"子模块",使其尽可能简单地相互引用?
我正在尝试围绕 NPM 的本地包进行思考,特别是因为它们与模块化项目相关。
我正在构建一个具有前端和后端 API 的 Web 应用程序。这些需要共享导出简单模型的包。我的项目目录结构如下所示:
package
├── api
│ ├── dist
│ │ └── <compiled files>
│ ├── node_modules
│ │ └── ...
│ ├── package.json
│ └── src
│ └── <source files>
├── application
│ ├── dist
│ │ └── <compiled files>
│ ├── node_modules
│ │ └── ...
│ ├── package.json
│ └── src
│ └── <source files>
└── models
├── dist
│ └── <compiled files>
├── node_modules
│ └── ...
├── package.json
└── src
└── <source files>
API 和应用程序项目都将使用模型,因此我将该代码抽象到项目中的单独子模块中。
我已经阅读了npm link
的文档,这似乎是正确的方法,因为据我了解,它在node_modules
目录中对称链接包。这允许访问当前存在的代码,而不是在node_modules
中安装副本。听起来像是我需要的,但有一个皱纹:我正在几个不同的地方做这个项目:我的笔记本电脑,我的工作办公室,偶尔在家里。此外,其他人将来将为该项目做出贡献。
我想让新的贡献者尽可能简单地启动并运行开发。
目前,新的贡献者要执行以下步骤:
- 克隆存储库
cd
到模型中的目录- 运行
npm install
npm link
- 运行
cd
API 目录- 运行
npm install
npm link models
- 运行
cd
到应用程序目录中- 运行
npm install
npm link models
- 运行
- 开始工作
我想做的(我认为npm
应该有能力做的)是:
- 克隆存储库
cd
到模型中- 运行
npm install
- 运行
cd
API 目录- 运行
npm install
- 运行
cd
到应用程序目录中- 运行
npm install
- 运行
- 开始工作
我可以编写一个脚本来执行此操作,但这似乎是npm
的一个明显用例,我怀疑它可能能够做这样的事情。我想我可能忽略了一些东西,因为我在文档中找不到它。
可能有更好的方法来解决这个问题,但是..
一种可能性是在项目的根目录中创建一个package.json
,该处理项目的所有初始化。
package
├── package.json
package.json
的内容没有依赖项,而是使用package
目录中的npm install
链接和安装所有子模块的依赖项的脚本。
如果将以下内容放在package
文件夹中的package.json
中
{
"name": "package-name",
"version": "1.0.0",
"description": "Some description",
"scripts": {
"init-models": "cd ./models && npm install && npm link",
"init-api": "cd ./api && npm install && npm link",
"init-app": "cd ./application && npm install && npm link",
"postinstall": "npm run init-models && npm run init-api && npm run init-app"
}
}
您只需要npm install
初始化整个项目。