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
的一个明显用例,我怀疑它可能会做这样的事情。我想我可能会忽略一些东西,因为我没有在文档中找到它。
答案 0 :(得分: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
来初始化整个项目。