0

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. cd进入 api 目录
    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. cd进入 api 目录
    1. npm install
  4. cd进入应用程序目录
    1. npm install
  5. 开工

我可以编写一个脚本来做到这一点,但这似乎是一个明显的用例npm,我怀疑它可能能够做这样的事情。我想我可能忽略了一些东西,因为我没有在文档中找到它。

4

1 回答 1

1

可能有更好的方法来解决这个问题,但是..

一种可能性是在项目的根目录中创建一个package.json,它处理项目的所有初始化。

package
├── package.json

并且 的内容package.json没有依赖项,而是仅使用目录链接和安装所有子模块的依赖项的npm install脚本package

如果您将以下内容放在package.json文件package夹中

{
  "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初始化整个项目。

于 2017-03-01T15:41:01.300 回答