vue、rollup、sass、requirejs组成的vueManager
近段时间本人一直在思考如何基于vue搭建一个中后端管理系统的通用基础前端解决方案。思考的主要问题点如下:
- 如何使各个子业务模块的按需加载
- css预处理方案的选择
- 如何引入现代的前端工程思想,也就是工程化解决方案。
多余的话不说,本人按照效果图介绍下自己的拙建,强烈希望各位给予建议和指正。
说明:
- 标题:一个普通的vue组件,利用requirejs加载完成。
- 二级菜单:测试vue-route动态注入路由的能力
- 业务组件:测试和模块rollup编译后vue实现的子系统的接入(按需加载)。
- 源码:github地址,需要切换为framework分支。
一、css预处理方案
这块没什么好说的,由于本人只对sass比较熟悉,就引入了sass和compass。以及引入了gulp构建工具作为整体构建流程的控制。
二、前端工程化与按需加载
1. 前端打包工具
前端打包工具的选择上,最终我选择了rollup,而没有选择webpack的原因有如下几点:
- rollup实现了tree-shaking,他可以根据函数的引用自动最少引入第三方依赖,这点看上去有点牵强,因为webpack2也引入了tree-shanking概念。
- rollup打包的模式更丰富,打包后的文件结构也更为清晰
- rollup可以按需排除一些第三方引入库,这让我做requirejs按需加载时控制第三方库的版本更为有效。如:多个子业务模块都引用了vue,但我们必须得保证所有引入的vue版本是一致的。
- rollup配置简单
2. 按需加载
按需加载库我选择requirejs的理由如下:
- 按需加载的库很多,如seajs、mod.js等,选择requirejs由于我比较熟悉他。
- webpack也有按需拆包和加载的能力,但考虑到后期组件的增加,会让webpack的编译压力更大,暂缓之。
三、根据代码说事
1. app文件夹
- modules文件:自定义模块化的vue组件
此文件存储为多个独立的vue组件,此类组件由一个js文件和一个html文件组成。此类组件的加载是由requirejs获取文件和组合实现(此方法在app.js中实现)。title组件代码如下:
html:
<div>{{title}}</div>
Js
define([],function(){
return {
name: 'ctitle',
data: function(){
return {
title: '这是一个标题'
}
},
beforeMount:function(){
this.$store.dispatch('childs',[]);
}
};
});
注意:
- name的值必须为小写。
- layout/default组件实现了整体界面的布局,以及路由的跳转(后期会优化)
var _event = event, self = this;
var chooseItem = function(item){
router.push(item.href);
self.$store.dispatch('selectRootItem', item);
} self.$store.dispatch('childs',[]); if(item.thridpart && !_cahce[item.id]){
_app.acquire(item.path).done(function(arg){
arg[0].install(_app.createContext());
_cahce[item.id] = true;
chooseItem(item);
});
}else{
chooseItem(item);
}
此部分为路由跳转方法的源码,特别点在于第三方业务模块的加载,我需要require完成后才会执行路由的跳转。
- app.js 此类为requirejs和vue结合的核心文件,主要提供了如下方法:
- createVue: vue实例的创建(注入vuex、vue-router等和三方组件)。
- createComponent: modules类型的组件加载。
- createContext: 创建提供给第三方业务组件的下文。
在实现的过程中,大量的使用了promise,所以引入了jquery(后期会替换为直接的promise类库)。
- main.js和index.html 系统的入口文件为index.html,其中导入了requirejs和main.js的引用,main.js作为整个前端系统的入口,会加载全局的vue组件,和创建一个vue实例。代码如下:
require(['./app'],function(app){
var _app = app.createApp();
_app.registerGlobalComponents(['title', 'route', 'layout/default']).done(function(){
var vue = _app.createVue();
vue.$mount('#app');
});
});
- chart.js和test.js
这两个文件都是用于测试对vue组件的动态注册,以及vue-router(路由)的动态组件,以及对store的操作。这两个惟一不同的地方在于,chart.js是手动写的,而test.js是通过rollup打包生成的(也就是src/master模拟的业务模块)。
2. assets文件夹
skin(皮肤样式)的sass源码,皮肤的编译是通过gulp任务完成的。
3. build文件夹
提供rollup打包的配置。配置文件如下:
var VueLoader = require('rollup-plugin-vue');
var Resolve = require('rollup-plugin-node-resolve');
var Commonjs = require("rollup-plugin-commonjs");
var path = require('path');
var babel = require('rollup-plugin-babel'); module.exports = {
entry: path.resolve(__dirname, '../src/master/index.js'),
external: ['vue'],
plugins: [VueLoader(), babel(), Resolve(), Commonjs()]
}
rollup打包调用:
var masterConfig = require('./rollup.dev.conf');
var rollup = require('rollup');
var path = require('path');
rollup.rollup(masterConfig).then(function(bundle){
bundle.write({
format: 'amd',
dest: path.resolve(__dirname, '../dest/test.js')
});
});
注意:
- external节点用于排除不需要打包的模块,可以第三方的,也可以是本地的。
- rollup的调用,是通过对nodejs提供的api实现的,所以我们打包是应该是输入:
node ./build/runtime-server.js
。
4. src文件夹
业务模块的源码目录,此目录下的代码需要通过rollup编译后,才可使用。master模块是一个示例模块。
5. .babelrc和gulpfile.js
- .babelrc是babel的配置文件,因为rollup不支持把babel作为配置参数节点传入。
- gulpfile.js作为gulp构建任务的入口,实现了sass的编译、dev模式任务。
6. 其他
- lib文件夹存储的为requirejs需要引入的第三方库,这里就包含vue、vue-route、vuex、requirejs、text.js、css.js等。
- dest:暂时存储rollup打包编译生成的结果文件。
- skin:css样式文件存储的位置
vue、rollup、sass、requirejs组成的vueManager的更多相关文章
- 解决 vue 的缩进问题 及 vue 的 sass 调用 mixin 函数
1.解决 vue 的缩进问题 配置 eslint , 只要要eslint 对应的值为 0,则 eslint 将不会对其进行检测 (.eslintrc.js -- rules ) A. 不检测 缩进 ...
- vue 安装sass扩展
1.创建一个基于 webpack 模板的新项目 $ vue init webpack myvue 1 2.在当前目录下,安装依赖 $ cd myvue $ npm install 1 2 3.安装sa ...
- vue -- 使用sass并引入公共sass文件
sass可以提高我们的开发效率,怎么在vue的项目中使用sass并且可以设置一些公共的文件呢? 使用sass 1.安装sass的依赖包 npm install --save-dev sass-load ...
- 在vue配置sass
先npm两个插件 npm install sass-loader --save-dev npm install node-sass --save-dev 然后在webpack当中配置 { test: ...
- vue使用sass
一.安装sass依赖包 $ npm install sass-loader --save-dev //sass-loader依赖于node-sass $ npm install node-sass - ...
- vue中sass的配置安装流程
1.安装node-sass,因为scss是基于此库的 cnpm install --save-dev node-sass 2.安装sass-loader cnpm install --save-dev ...
- vue - 添加sass(less)处理
1. 添加less.sass处理 1.1如果是sass,首先在当前目录安装处理插件(sass): npm i -D node-sass sass-loader 1.2如果是less,首先在当前目录安装 ...
- vue使用sass报Modele build failed: TypeError: this.getResolve is not a function at Object.loader...
项目中使用sass报错,之前一直使用同样的安装方式 cnpm install sass-loader node-sass -D,正常使用没问题,没想到这次同样的方式却报错了,网上查的原因是sass-l ...
- vue 使用 sass 或者 less ( vue-cli 3 )
项目使用 vue-cli 3 在项目中使用 sass npm install sass-loader --save -D cnpm install sass-loader --save -D ...
随机推荐
- ZooKeeper集群-搭建指南
第一步: 上传安装程序到Linux 这一步很简单就不在这过多说明了! 第二步: 在Linux上使用命令行安装 第三步: 修改配置文件 1.修改zoo.cfg文件 2.修改集群中各台主机的名称 1).如 ...
- 【C++】浅谈三大特性之一继承(三)
四,派生类的六个默认成员函数 在继承关系里,如果我们没有显示的定义这六个成员函数,则编译系统会在适合场合为我们自动合成. 继承关系中构造函数和析构函数的调用顺序: class B { public: ...
- XJOI1559树转二叉树
树转二叉树 将一棵树转化成二叉树. 输入格式: 输入的信息,第一行一个数n,(n<=1000)是树的结点数,以下n行,第i+1行是第i个结点的信息,第一个整数,是该结点的特征数值,后列出所有孩子 ...
- Luogu1074靶形数独【启发式搜索】
Luogu1074靶形数独 题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他 们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教, ...
- html中引入调用另一个html的方法
html中引入调用另一个html的方法,尝试了好几种,都列出来: 其中第一种是最好的,其他的方法,可以尝试看看,是不是适合你当前项目 一.div+$("#page1").load( ...
- 网站防止SQL注入方法
方法:所有获取GET.POST变量都先进行过滤: 字符串-- htmlspecialchars(addslashes($string)) addslashes() 函数返回在预定义字符之前添加反斜杠 ...
- PPT里面实现动态图表
今天又被学生提问,可不可以在PPT中做类似Excel中的动态图表?Excel里实现动态图表的方法通常是将图表关联到一个固定的数据区域,然后通过其他单元格的值或者控件来改变该固定区域的数据,以达到动态改 ...
- ELK日志分析系统的应用
收集和分析日志是应用开发中至关重要的一环,互联网大规模.分布式的特性决定了日志的源头越来越分散, 产生的速度越来越快,传统的手段和工具显得日益力不从心.在规模化场景下,grep.awk 无法快速发挥作 ...
- RHEL7对比RHEL6的主要变化
RHEL7和RHEL6的主要变化 RHEL7和RHEL6的主要变化 RHEL7 RHEL6 文件系统 XFS EXT4 内核版本 3.10.x-x系列 2.6.x-x系列 内核名称 Maipo S ...
- 3 安装Zookeeper
cnblogs-DOC 1.服务器环境 2.安装Redis3.安装Zookeeper4.安装MPush5.安装Alloc服务6.完整测试7.常见问题 从官网直接下载Zookeeper最新版本(Zook ...