要将一个 npm 包发布到 本地 而不是直接发布到 npm Registry,可以有以下几种方式:
1. 使用 npm link
(开发时调试本地包)
npm link
是一种常用方法,用于在本地创建包的全局符号链接,从而在项目中使用这个包。
步骤:
进入包目录(假设你的包目录是
my-package
):cd my-package
运行
npm link
命令:npm link
- 这会将该包链接到全局的
node_modules
目录下。
- 这会将该包链接到全局的
进入需要使用这个包的项目目录:
cd my-project
在项目中创建一个符号链接到这个本地包:
npm link my-package
- 这会将项目的
node_modules/my-package
指向本地包的目录。
- 这会将项目的
测试包的功能:
- 现在你可以在项目中像使用正常 npm 包一样使用
my-package
了。
- 现在你可以在项目中像使用正常 npm 包一样使用
注意:
- 适合在开发期间使用,生产环境不推荐。
- 你修改了
my-package
的源码后,只需要重新编译(如果有)即可,链接会自动更新。
2. 使用 npm pack
(本地压缩并安装)
npm pack
会将包打包成一个 .tgz
文件,然后你可以在本地安装这个文件。
步骤:
进入包目录:
cd my-package
打包包:
npm pack
- 这会在当前目录生成一个
.tgz
文件(例如:my-package-1.0.0.tgz
)。
- 这会在当前目录生成一个
安装这个本地包到另一个项目:
- 进入需要使用这个包的项目目录:
cd my-project
- 运行安装命令:
npm install ../my-package/my-package-1.0.0.tgz
- 现在这个包已经被安装到
node_modules
中,可以像普通 npm 包一样使用。
- 进入需要使用这个包的项目目录:
注意:
- 如果你修改了
my-package
,需要重新运行npm pack
打包并重新安装。
3. 设置本地 Registry(完全模拟 npm 发布流程)
如果你想模拟完整的 npm 发布流程(但只针对本地环境),可以使用一个本地的 npm Registry,比如 verdaccio
。
步骤:
安装
verdaccio
:npm install -g verdaccio
启动本地 Registry:
verdaccio
- 默认情况下,
verdaccio
会在http://localhost:4873
上运行。
- 默认情况下,
配置 npm 使用本地 Registry:
- 运行以下命令,将 npm 的发布和安装指向本地 Registry:
npm set registry http://localhost:4873/
- 运行以下命令,将 npm 的发布和安装指向本地 Registry:
登录到本地 Registry:
- 使用以下命令登录本地 Registry:
npm adduser --registry http://localhost:4873/
- 按提示输入用户名、密码、邮箱。
- 使用以下命令登录本地 Registry:
发布包到本地 Registry:
- 在包目录下运行:
npm publish --registry http://localhost:4873/
- 在包目录下运行:
在项目中安装这个本地包:
- 进入项目目录:
cd my-project
- 运行以下命令安装包:
npm install my-package --registry http://localhost:4873/
- 进入项目目录:
恢复默认 Registry(如果需要发布到全局 npm):
npm set registry https://registry.npmjs.org/
4. 直接引用本地目录
如果只是简单使用包而不需要完整的发布,可以直接通过文件系统引用本地目录。
步骤:
在项目中安装本地目录:
- 进入需要使用这个包的项目:
cd my-project
- 安装本地包目录:
npm install ../my-package
- 或者使用
file:
指定路径:npm install file:../my-package
- 进入需要使用这个包的项目:
测试包的功能:
- 现在你可以像使用普通 npm 包一样使用这个包。
注意:
- 如果你修改了
my-package
,需要重新安装(或者使用npm link
来避免重复安装)。
总结
发布到本地可以根据需求选择不同方法:
- 开发调试时:使用
npm link
。 - 模拟真实发布:使用
verdaccio
搭建本地 Registry。 - 简单本地测试:使用
npm pack
或直接引用目录 (npm install ../my-package
)。