项目里本身封装了一些经常使用组件,但要是 新启项目 还得手动复制过去。尝试着能不能 像mint-ui似的,封装成npm包, 之后直接使用npm安装,确定方便多了。javascript
开干吧!!!css
使用vue-cli 建立一个 基础项目。
本例使用的是 项目 自带的 helloworld 组件,自己不用作改动。主要是一些配置文件的更改。html
"name":"zha-vue-npm", "private":false,//公开项目 "license":"MIT",//开源协议 "main":"dist/hello-world.min.js",//打包后的入口文件
修改output配置 和 css 文件名称配置vue
// 固定的文件名称 output: { path: config.build.assetsRoot, publicPath: config.build.assetsPublicPath, filename: 'hello-world.min.js', library: 'HelloWorld', libraryTarget: 'umd' }, optimization: { splitChunks: { cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, name: 'vendor', chunks: 'all' }, manifest: { name: 'manifest', minChunks: Infinity }, } }, }, plugins: [ new webpack.DefinePlugin({ 'process.env': env }), new UglifyJsPlugin({ uglifyOptions: { compress: { warnings: false } }, sourceMap: config.build.productionSourceMap, parallel: true }), new MiniCssExtractPlugin({ // 固定的css文件名称 filename: utils.assetsPath('hello-world.min.css'), allChunks: true, }),
build: { // Template for index.html index: path.resolve(__dirname, '../dist/index.html'), // Paths assetsRoot: path.resolve(__dirname, '../dist'), assetsSubDirectory: '/', // 跟js文件同级 assetsPublicPath: '/',
将该组件导出java
import HelloWorld from './HelloWorld.vue' export default HelloWorld;
.DS_Store node_modules/ build/ config/ static/ .babelrc .editorconfig .gitignore .npmignore .postcssrc.js index.html package-lock.json npm-debug.log* yarn-debug.log* yarn-error.log* #Editordirectoriesandfiles .idea .vscode *.suo *.ntvs* *.njsproj *.sln
npm帐号注册地址:https://www.npmjs.comnode
参考命令:webpack
npm login //登陆npm npm publish //发布包 npm unpublish //删除包
注意事项:git
此处须要将 将淘宝镜像 还原。不然 发布、安装 都出问题。 // 查询当前配置的镜像 npm get registry //https://registry.npmjs.org/ // 设置成淘宝镜像 npm config set registry http://registry.npm.taobao.org/ // 换成原来的 npm config set registry https://registry.npmjs.org/
另外,每次发布 须要 修改 package.json 里的 version。
还须要注意是否包名(package.json 里的 name)冲突,npm 平台已存在的话 不让上传。
npm i zha-vue-npm (package.json 里面的name) import HelloWorld from'zha-vue-npm' import Css from'zha-vue-npm/dist/hello-world.min.css' // 样式这么导入
咱们已经完成了一个单一组件的打包发布。休息一下,接下来 弄咱们本身的组件库。web
参考连接:http://www.javashuo.com/article/p-poclxuxg-ea.htmlvue-cli
弄成 像mint-ui那样,能够全局安装全部,也能够 按需安装部分组件
按需加载
利用 babel-plugin-component 插件,来实现按需加载。该插件须要的是 这样一个文件结构
项目仍然是 vue-cli 搭建的基础项目。
"name": "vue-zyby-ui", "version": "0.0.15", "description": "A Vue.js project", "author": "zha <675486943@qq.com>", "private": false, "license": "MIT", "main": "lib/app.js", // 入口文件
import AWord from './components/AWord.vue'; import Back from './components/Back.vue'; // install 是 用来所有安装的关键 const install = function(Vue) { if (install.installed) return; Vue.component(Back.name, Back) Vue.component(NoData.name, NoData) }; export default { install, AWord, Back, };
导入所有组件. ```javascript import Vue from 'vue'; import zybyUi from 'vue-zyby-ui' import 'vue-zyby-ui/theme/index.css' Vue.use(zybyUi); ``` 导入指定组件. (用到 babel-plugin-component) ```javascript import { CallPhone, NoData } from 'mint-ui'; Vue.component(CallPhone.name, CallPhone); Vue.component(NoData.name, NoData); ``` ## babel-plugin-component 安装 npm i babel-plugin-component -D 配置.babelrc ```javascript
{
"libraryName": "vue-zyby-ui",
"camel2Dash": false,
"styleLibrary": {
"name": "theme",
"base": true
}
},
```
## 注意事项 部分组件css 使用了rem单位,以适配移动端。所以 使用本组件库前,所在项目应 进行适配改造。
改造所用库: lib-flexible 和 postcss-px2rem-exclude ,参见如下连接 http://www.javashuo.com/article/p-cygziwwb-bk.html
利用 babel-plugin-component 的配置属性 ,base : true。能够设置一个base.css 基础样式,按需加载时 会自动引入。
注意 不要把 所有安装 和 按需安装 混用,不然 base.css 读取不到。
难点主要是 base.css 文件的生成,因为 webpack 没法单独生成css文件(要依赖js)。这里 我新建了一个 base.js 文件,也做为了一个 webpack 的入口文件。
base.js // 仅仅是用来 生成 base.css 文件 import './assets/css/base.less'
在 components.json 里 引入 base。此时文件目录以下