假如我写了一些组件,我也想让其他人像通过
npm install element-ui
的方式安装我们自己的组件,我该从哪里下手?
我们知道npm
是用来管理包的,我们通过npm install xxx
的时候,会在package.json
文件依赖中写入xxx
名称(被写在dependencies
属性或者devDependencies
属性中),并且xxx
包会被拉取到node_modules
文件夹下(如果node_modules
不存在会进行创建)。
一、组件库本地开发
1、编写组件
我们定义一个packages
文件夹,用来编写组件。
在packages
文件下定义一个hello
文件夹,里面分别定义main.vue
和index.js
文件:
// main.vue文件
<template>
<div>hello,{{ msg }}~</div>
</template>
<script>
export default {
props: ["msg"],
name: "qb-hello",
};
</script>
在main.vue
文件中编写组件和我们平时开发一样简单。
// index.js文件
import qbHello from './src/main.vue';
export default qbHello;
index.js
文件中引入qbHello
组件对象,然后,再将其导出。
2、管理组件
在和packages
文件同级目录创建index.js
文件:
import qbHello from "./packages/hello/index.js";
const components = [qbHello]
const install = function (Vue, opts = {}) {
components.forEach(component => {
Vue.component(component.name, component);
});
};
export default {
version: '1.0.8',
install,
}
这里将编写的组件推入到components
组件中。
然后定义install
函数,执行install
函数的时候,相当于通过循环的方式为Vue
注册了一个个的全局组件。
3、组件库描述文件
再通过npm init
的方式在统计目录下按照提示输入信息,生成package.json
文件:
{
"name": "qb-component",
"version": "1.0.8",
"description": "this is a ui libray",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "qb",
"license": "ISC",
"devDependencies": {},
"keywords": []
}
package.json
是组件库的描述文件,这里简单描述了组件库的名称、版本、描述、入口文件、作者和关键词等信息。
此时,我们的极简组件库就在本地开发完成了,接下来就将其发布到npm
中。
二、组件库推送npm
4、注册账号
浏览器输入:npm (npmjs.com),找到sing in
按钮按照提示操作即可。
5、本地添加账号
然后通过npm adduser
的方式在本地添加账号,让本地和远程建立连接。然后根据提示输入npm
的账号、密码和注册邮箱即可。
6、发布包
现在就可以通过npm publish
的方式发布我们自己的包到第三方仓库npm
中了。
发布结果如下所示。
$ npm publish
npm notice
npm notice 📦 qb-component@1.0.8
npm notice === Tarball Contents ===
npm notice 290B index.js
npm notice 272B package.json
npm notice 63B packages/hello/index.js
npm notice 130B packages/hello/src/main.vue
npm notice === Tarball Details ===
npm notice name: qb-component
npm notice version: 1.0.8
npm notice filename: qb-component-1.0.8.tgz
npm notice package size: 582 B
npm notice unpacked size: 755 B
npm notice shasum: e4d68bab6cb349e5861a3600da0bbd729038e81b
npm notice integrity: sha512-dVixKqBap5Q5F[...]ruVUrKub0r98A==
npm notice total files: 4
npm notice
npm notice Publishing to https://registry.npmjs.org/
+ qb-component@1.0.8
到这里,我们就已经把我们本地的包发布到npm
中了。可以打开自己的npm
看看结果:
至此,我们就在npm
中发布了自己的组件库。
三、组件库应用在项目中
7、安装包
你现在就可以在自己的项目中通过npm install qb-component
的方式下载我的组件库了。执行结果为
added 1 package, and audited 3 packages in 2s
found 0 vulnerabilities
8、分析包
当我们不确定是否安装成功时,可以通过执行npm ls
的方式查找包:执行结果为
project@1.0.0 E:\learn\npm\project
└── qb-component@1.0.8
9、在项目中注册
首先在main.js
文件中引入并注册:
import qbComponent from 'qb-component';
Vue.use(qbComponent)
10、在项目中使用
我们可以在App.vue
文件中使用我们自己组件库中的组件:
<template>
<qb-hello :msg="msg"></qb-hello>
</template>
<script>
export default {
data() {
return {
msg: 'qb'
}
}
}
</script>
现在,我们就在自己的项目中使用了自己组件库中的组件qb-hello
。