基于原生开发脚手架

脚手架开发流程

  • 创建 npm 项目
  • 创建脚手架入口文件,最上方添加:#!/usr/bin/env node
  • 配置 package.json,添加 bin 属性,设置脚手架命令执行该入口文件
  • 编写脚手架代码
  • 将脚手架发布到 npm

注意:如果执行 npm i 命令所在的目录是脚手架的父级目录,安装后 lib/node_modules 中的包会指向本地的脚手架。也就是说本地更改代码后,指向命令其结果也会改变,方便本地调试。如果不想这样,执行安装命令时请更改目录。

脚手架的本地调试方法

除了上述方法,还可以使用 npm link 的方式进行本地 npm 包开发。

进入本地 npm 包所在目录,运行命令 npm link,就会在 /usr/local/lib/node_modules 目录下加入本地包,并且在 /usr/local/bin 目录中创建软链接。

cd zjw-test
npm link
ll /usr/local/bin/zjw-test
# lrwxr-xr-x  1 zhoujiawei  wheel    41B 12 26 19:15 /usr/local/bin/zjw-test -> ../lib/node_modules/zjw-test/bin/index.js
ll /usr/local/lib/node_modules
# lrwxr-xr-x   1 zhoujiawei  wheel    44B 12 27 00:20 zjw-test -> /Users/zhoujiawei/Desktop/脚手架/zjw-test

如果本地 npm 包开发过程中还依赖本地另外一个 npm 包,又该怎么处理呢?

假设两个包为: zjw-test、zjw-test-lib,zjw-test 依赖 zjw-test-lib。

  • 进入 zjw-test 目录,执行 npm link
  • 进入 zjw-test-lib 目录,执行 npm link
  • 此时,两个包都别加入到 lib/node_modules 中了,再在 zjw-test 中执行 npm link zjw-test-lib,相当于安装了依赖包 zjw-test-lib
  • 在 package.json 中,更改版本号,删除 node_modules,执行 npm i,重新安装依赖包。
cd zjw-test-lib && npm link
cd zjw-test && npm link && npm link zjw-test-lib && rm -rf node_modules && npm i

如果先在 zjw-test-lib 中执行 npm unlink,再在 zjw-test 执行 npm unlink zjw-test-lib 会报文件不存在的错误。

当 zjw-test-lib 开发完成后需要发布,操作如下:

  • 进入 zjw-test 目录,执行 npm unlink zjw-test-lib
  • 进入 zjw-test-lib 目录,执行 npm unlink,修改 version,执行 npm publish
  • 进入 zjw-test 目录,执行 rm -rf node_module,重新安装依赖,执行 npm publish
  • 发布成功后重新安装全局 zjw-test

总结

  • 链接本地脚手架:
cd your-cli-dir
npm link
  • 链接本地库文件:
cd your-lib-dir
npm link
cd your-cli-dir
npm link your-lib
  • 取消链接本地库文件:
cd your-lib-dir
npm unlink
cd your-cli-dir
# link存在
npm unlink your-lib
# link不存在
rm -rf node_modules
npm install -S your-lib

理解 npm link:

  • npm link:将当前项目链接到 node 全局 node_modules 中作为一个库文件,并解析 bin 配置创建可执行文件
  • npm link your-lib:将当前项目中 node_modules 下指定的库文件链接到 node 全局 node_modules 下的库文件

理解 npm unlink:

  • npm unlink:将当前项目从 node 全局 node_modules 中移除
  • npm unlink your-lib:将当前项目中的库文件依赖移除
Copyright © imooc-lego (2020 - present) all right reserved,powered by GitbookFile Modify: 2021-06-27 08:04:56

results matching ""

    No results matching ""