快速入门第一个脚手架

一、创建一个文件夹

bash 复制代码
mkdir hzz-test
cd hzz-test

二、初始化

csharp 复制代码
npm init -y

三、进入VsCode,配置package.json,添加bin属性,编写脚手架代码

css 复制代码
code .
  • 创建一个bin文件夹,在下面创建index.js文件
  • 在index.js文件中输入
javascript 复制代码
#!/usr/bin/env node

console.log('hello hzz')
  • 在package.json中配置
json 复制代码
"bin": {
    "hzz-test": "bin/index.js"
  },

四、将脚手架发布到npm

npm login需要在npmjs镜像下登录,如果在淘宝镜像下登录会报错

npm login
npm publish

发布成功后到npmjs.com中查看

五、回到终端安装脚手架

安装包:

css 复制代码
npm i -g hzz-test

运行包

hzz-test

注:这样拥有的是一个和本地版本一样的包,本地更新和终端运行的一样,如果需要一个远程版本的(即发布版本)需要在一个目录下没有hzz-test的文件下去重新安装hzz-test(npm i -g hzz-test),然后再运行hzz-test就可以得到一个和远程版本一样的了。

六、脚手架本地调试方法

方法1:在hzz-test上级全局安装脚手架,然后运行

css 复制代码
npm i -g hzz-test

hzz-test

方法2:移除安装的脚手架,然后在vscode脚手架项目中执行link命令去建立软链接

arduino 复制代码
npm remove -g hzz-test
bash 复制代码
npm link

七、分包(多个项目,在一个包中link另一个包)

再建一个文件夹,如hzz-test-lib

初始化:

bash 复制代码
cd hzz-test-lib

npm init -y

hzz-test-lib文件夹下新建lib文件夹,lib下新建index.js文件(源码):

javascript 复制代码
// lib/index.js 写一个sum方法
module.exports = {
    sum(a, b) {
        return a + b;
    }
}

在hzz-test中直接引用hzz-test-lib这个包:

  • 本地使用:
bash 复制代码
cd hzz-test-lib

npm link

cd ..

cd hzz-test

npm link hzz-test-lib

npm install -S hzz-test-lib(会失败,因为hzz-test-lib还没有发布,所以需要手动到package.json中添加)
swift 复制代码
// hzz-test/package.json

{
  "name": "hzz-test1",
  "version": "1.0.0",
  "description": "",
  "bin": {
    "hzz-test": "bin/index.js"
  },
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "hzz-test-lib": "^1.0.0"
  }
}

在hzz-test的bin/index.js中使用hzz-test-lib包

javascript 复制代码
#!/usr/bin/env node
const lib = require('hzz-test-lib')
console.log(lib, lib.sum(1, 2))
console.log('hello hzz 1111')

修改hzz-test-lib的入口文件:

因为hzz-test-lib下没有index.js文件,而是lib/index.js,所以main为lib/index.js

swift 复制代码
// hzz-test-lib/package.json

{
  "name": "hzz-test-lib",
  "version": "1.0.2",
  "description": "",
  "main": "lib/index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

现在就可以运行了

bash 复制代码
cd hzz-test

node bin/index.js
  • hzz-test-lib发布上线后使用:
arduino 复制代码
// 上线

cd hzz-test-lib

npm publish

解除link链接后才能使用,否则会默认本地

vbnet 复制代码
cd hzz-test

npm link hzz-test-lib

npm unlink hzz-test-lib

npm remove -g hzz-test-lib

npm install -S hzz-test-lib // 此时hzz-test目录下会有一个node_modules文件夹,里面有一个hzz-test-lib文件夹

node bin/index.js

总结:

  • 链接本地脚手架
bash 复制代码
cd your-cli-dir
npm link
  • 链接本地库文件
bash 复制代码
cd your-lib-dir
npm link
cd your-cli-dir
npm link your-lib
  • 取消链接本地库文件
bash 复制代码
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 your-lib: 将当前项目中node_modules下指定的库文件链接到node全局node_modules下的库文件
  • npm link: 将当前项目链接到node全局node_modules中作为一个库文件,并解析bin配置创建可执行文件

理解npm unlink:

  • npm unlink: 将当前项目从node全局node_modules中移除
  • npm unlink your-lib: 将当前项目中的库文件依赖移除
相关推荐
彭世瑜16 分钟前
ts: TypeScript跳过检查/忽略类型检查
前端·javascript·typescript
FØund40417 分钟前
antd form.setFieldsValue问题总结
前端·react.js·typescript·html
Backstroke fish18 分钟前
Token刷新机制
前端·javascript·vue.js·typescript·vue
小五Five19 分钟前
TypeScript项目中Axios的封装
开发语言·前端·javascript
小曲程序19 分钟前
vue3 封装request请求
java·前端·typescript·vue
临枫54119 分钟前
Nuxt3封装网络请求 useFetch & $fetch
前端·javascript·vue.js·typescript
前端每日三省21 分钟前
面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们?
开发语言·前端·javascript
小刺猬_98521 分钟前
(超详细)数组方法 ——— splice( )
前端·javascript·typescript
渊兮兮23 分钟前
Vue3 + TypeScript +动画,实现动态登陆页面
前端·javascript·css·typescript·动画
鑫宝Code23 分钟前
【TS】TypeScript中的接口(Interface):对象类型的强大工具
前端·javascript·typescript