Nexus 3信息
私有库:http://**:8081/repository/cc-npm-hosted/
代理库:http://**:8081/repository/cc-npm-proxy/
仓库组:http://**:8081/repository/cc-npm-group/css
认证信息:cc_npm_publicer/cc_npm_publicerhtml
NPM处理过程:vue
建立目录(目录名称建议与包名相同),而后建立package.json文件node
package.json中的name以及version更改成对应名称及版本webpack
webpack.config.js中配置git
const NODE_ENV = process.env.NODE_ENV;
console.log("-----NODE_ENV===", NODE_ENV);
// "main": 'dist/sumFunction.js',
module.exports = {
entry: NODE_ENV == 'development' ? './src/main.js' : './src/myPlugin/infoConfig/index.js', //index中引入页面和vuex组件
output: {
path: path.resolve(__dirname, './dist'),
publicPath: '/dist/',
filename: 'index.js',
library: 'deviceTrend', // 指定的就是你使用require时的模块名
libraryTarget: 'umd',
umdNamedDefine: true
}github
配置好json后将所需资源文件加入到目录,而后执行命令进行发布:web
登陆:npm login --registry=http://192.168.138.182:8081/repository/cc-npm-hosted/
发布:npm publish --registry=http://192.168.138.182:8081/repository/cc-npm-hosted/vue-router
使用:vuex
须要配置registry 或安装时制定库
npm install [package-name] --registry=http://192.168.138.182:8081/repository/cc-npm-group/
或
npm config set registry http://192.168.138.182:8081/repository/cc-npm-group/
或
编辑 ~/.npmrc 加入下面内容,registry = http://192.168.138.182:8081/repository/cc-npm-group/
项目引入:
main.js中写入
import TrendChart from 'device-trend'
Vue.component('trend-chart', TrendChart.devicetrend)
store.js中写入
import DeviceTrend from 'device-trend'
本文参考 https://www.cnblogs.com/max-t...
项目初始化:
1.1 之前咱们初始化vue工程都是用 webpack 的完整配置模板,也就是: vue init webpack my-project
1.2 若组件至关复杂,并且须要打包到一个vue组件中建议使用 Vue CLI 3 使用Vue CLI 3将基于element-ui二次封装的组件发布到npm
npm uninstall -g vue-cli
cnpm install -g @vue/cli
vue create my-app
cd my-app
vue add element
参考网址: https://www.cnblogs.com/lalalagq/p/9921283.html vue-cli-plugin-element https://github.com/ElementUI/vue-cli-plugin-element 1.3 咱们要写的是一个简单的vue组件,不须要依赖那么多而庞大的配置,因此,这里咱们用简介版本的webapck配置模板,即: vue init webpack-simple my-project 三者的差别: https://segmentfault.com/a/1190000011402931 1.4 初始化完成后 1.5 既然是封装组件,那咱们在 src 下面建立一个 myPlugin 文件夹规整一点吧, 而后,考虑到要写不少种状况,咱们在 myPlugin 下面放咱们的插件(若是我的习惯不想区分也行,只是方便管理), 当前组件的相关文件咱们给一个 infoConfig 文件夹名字,下面建立 common-config.vue 和 index.js 1.6 接下来,打开终端,安装依赖,启动项目 npm install npm run dev 而后,咱们来写 common-config.vue ,天然是咱们的组件代码: 1.7 写好了组件,咱们本地看下效果先: (1)打开 src/App.vue 文件,进行简单的编辑配置; (2)执行 npm run dev 查看页面效果。 1.8 继续咱们 infoConfig/index.js 文件,目的:将该组件做为 Vue 插件 此处须要注意的是 install。 Vue的插件必须提供一个公开方法 install,该方法会在你使用该插件,也就是 Vue.use(yourPlugin) 时被调用。 这样也就给 Vue全局注入了你的全部的组件。 参考 https://cn.vuejs.org/v2/guide/plugins.html#%E5%BC%80%E5%8F%91%E6%8F%92%E4%BB%B6
修改配置项:
2.1 修改 webpack.config.js :
entry: NODE_ENV == 'development' ? "./src/main.js" : "./src/myPlugin/infoConfig/index.js",
// 根据不一样的执行环境配置不一样的入口
output: {
path: path.resolve(__dirname, './dist'), publicPath: '/dist/', filename: 'index.js', library: 'systemInfoConfig', // 指定的就是你使用require时的模块名 libraryTarget: 'umd', // 指定输出格式 // 为了支持多种使用场景,咱们须要选择合适的打包格式。 // 常见的打包格式有 CMD、AMD、UMD,CMD只能在 Node 环境执行, // AMD 只能在浏览器端执行,UMD 同时支持两种执行环境。 // 显而易见,咱们应该选择 UMD 格式 umdNamedDefine: true // 会对 UMD 的构建过程当中的 AMD 模块进行命名。不然就使用匿名的 define
}
修改完成后执行
npm run build
2.2 修改 package.json 文件: 每次上到npm上须要更改版本号,package.json 里的 version 字段 // 发布开源所以须要将这个字段改成 false
"private": false,
// 这个指 import tlp_plugin_sum 的时候它会去检索的路径
"main": "dist/index.js",
2.3 修改git上传代码,能够将 .gitignore 去掉忽略 dist , 把打包的文件也提交上去; 2.4 添加版权声明的插件 参考: https://webpack.js.org/plugins/banner-plugin/ https://segmentfault.com/a/1190000016949216?utm_source=tag-newest 要使用某个插件,咱们须要经过npm安装它,而后要作的就是在webpack配置中的plugins关键字部分添加该插件的一个实例(plugins是一个数组)
const webpack = require('webpack');
module.exports = {
...
module: { rules: [ { test: /(\.jsx|\.js)$/, use: { loader: "babel-loader" }, exclude: /node_modules/ }, { test: /\.css$/, use: [ { loader: "style-loader" }, { loader: "css-loader", options: { modules: true } }, { loader: "postcss-loader" } ] } ] }, plugins: [ new webpack.BannerPlugin('版权全部,翻版必究') ],
};
提交发布:
3.1 .npmignore 但是若是你在项目中添加了 .npmignore 文件,.npmignore 中的规则就会被忽略,能够屏蔽不想上传的源码文件。 使用语法与 .gitignore 相似。 3.2 登陆
npm login --registry=http://192.168.138.182:8081/repository/cc-npm-hosted/
3.3 输入 帐号 密码 邮箱
Username: cc_npm_publicer
Password: cc_npm_publicer
Email: guowei.cao@bangcle.com
3.4 发布
npm publish --registry=http://192.168.138.182:8081/repository/cc-npm-hosted/
3.5 发布成功 ********** 显示 相似于 + gulp1@1.1.1 就成功了 ******** 3.6 查看 可在 http://192.168.138.182:8081/#browse/browse:cc-npm-hosted:vue-tree%2Fvue-tree-1.0.1.tgz 查看结果
帐号: admin
密码: admin12345
更改迭代组件:
4.1 修改 package.json version 4.2 删除 dist 文件夹 4.3 npm run build 从新打包 4.4 再次重复步骤 3
下载安装,应用:
5.1 下载
npm install system-info-config --registry=http://192.168.138.182:8081/repository/cc-npm-hosted/
5.2 输入命令 npm install system-info-config --registry=http://192.168.138.182:8081/repository/cc-npm-group/ --save 5.3 依赖包同步到公司私服 npm install --registry=http://192.168.138.182:8081/repository/cc-npm-proxy/ 5.4 应用 main.js 中写入
import BangcleComponent from 'system-info-config'
Object.keys(BangcleComponent).forEach(key => {
Vue.component(BangcleComponent[key].name, BangcleComponent[key]);
});
<systemInfoConfig></systemInfoConfig>
system-info-config 主要完成的是一个公共的 vueX 文件: 该文件的编写过程当中 与 项目中的模块化vuex无异; 在项目中的使用方式是: store.js 中写入
import BangcleComponent from 'system-info-config' // 按需引入相应的模块化vueX
const SYSTEM_INFO_STORE = BangcleComponent.SYSTEM_INFO_STORE
if (module.hot) { // 使 action 和 mutation 成为可热重载模块 module.hot.accept(['system-info-config'], () => { // 获取更新后的模块 // 由于 babel 6 的模块编译格式问题,这里须要加上 `.default` const newMutations = require('system-info-config').default // 加载新模块 store.hotUpdate({ SYSTEM_INFO_STORE: newMutations.SYSTEM_INFO_STORE, }) })
}
模块热替换 https://webpack.docschina.org/api/hot-module-replacement 这样就完成了公共组件的vueX模块化引入 在须要使用的组件 dispatch 相应的方法便可,例如:
this.$store.dispatch('SYSTEM_INFO_STORE/UPDATE_SYSTEM_DEFAULT_INFO', this.updatedInfo);
this.$store.dispatch('SYSTEM_INFO_STORE/FETCH_SYSTEM_INFO');
一样咱们能够把 system-info-config 作成一个组件,相似于 componments 中的业务组件同样: 配置相应的 props 以及 default 值, watch 监听数据的变化,渲染相应的数据,在此再也不赘述 可参考 http://192.168.138.251/pg/bangcle_components/commit/1536ded6356999f0437ea3ba56c320e394c2ddf2#3f8dd5beab70eee423b1ddbe10ea26a683fe7715
entry: NODE_ENV == 'development' ? "./src/main.js" : "./src/myPlugin/infoConfig/index.js",
output: {
path: path.resolve(__dirname, './dist'),
publicPath: '/dist/',
filename: 'index.js',
library: 'systemInfoConfig', // 指定的就是你使用require时的模块名
libraryTarget: 'umd', // 指定输出格式
// 为了支持多种使用场景,咱们须要选择合适的打包格式。
// 常见的打包格式有 CMD、AMD、UMD,CMD只能在 Node 环境执行,
// AMD 只能在浏览器端执行,UMD 同时支持两种执行环境。
// 显而易见,咱们应该选择 UMD 格式
umdNamedDefine: true // 会对 UMD 的构建过程当中的 AMD 模块进行命名。不然就使用匿名的 define
},
用户管理公共组件
核心概念是把 用户管理的四个页面看成 路由直接抛出来,在父组件接收,并addRoute添加到项目工程中。
经过 VUEX 来动态改变咱们要调整的细节。
代码以下:
公共组件,配置路由的时候,强烈建议 使用import ,这样打包好的 dist 目录中,只有一个 js 文件(使用require,就会按需加载了,在父组件一直报错)。
import VueRouter from 'vue-router'import BangcleComponent from 'User-management-common-module'const customerRoute = BangcleComponent.customerRouteconst App = resolve => require(['../App.vue'], resolve)const appManage = {path: '/',component: App,redirect: '/manage/customer/customer',children: [managePlatform,customerRoute]}const routers = [{path: "/tologin",component(resolve) {require.ensure(['views/login.vue'], () => {resolve(require('views/login.vue'))})}}, ]let unfound = {path: '*',component(resolve) {require.ensure(['components/nofound.vue'], () => {resolve(require('components/nofound.vue'))})}};// 采用push,否则子组件的路由信息,都是404了routers.push(unfound);const router = new VueRouter({mode: 'history',routes: routers})// 动态加载路由router.addRoutes([appManage]);export default router