管理本地包的节点/NPM



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中安装副本。听起来像是我需要的,但有一个皱纹:我正在几个不同的地方做这个项目:我的笔记本电脑,我的工作办公室,偶尔在家里。此外,其他人将来将为该项目做出贡献。

我想让新的贡献者尽可能简单地启动并运行开发。

目前,新的贡献者要执行以下步骤:

  1. 克隆存储库
  2. cd到模型中的目录
    1. 运行npm install
    2. npm link
  3. cdAPI 目录
    1. 运行npm install
    2. npm link models
  4. cd到应用程序目录中
    1. 运行npm install
    2. npm link models
  5. 开始工作

我想做的(我认为npm应该有能力做的)是:

  1. 克隆存储库
  2. cd到模型中
    1. 运行npm install
  3. cdAPI 目录
    1. 运行npm install
  4. cd到应用程序目录中
    1. 运行npm install
  5. 开始工作

我可以编写一个脚本来执行此操作,但这似乎是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初始化整个项目。

最新更新