一步步创建基于React+EF6+WebApi2+Gulp的项目(前端篇)

一、关于Gulp

Q1:  为什么需要Gulp或Grunt?

1.  缓存问题,javascript和css都属于静态文件,因此当我们修改javascript文件时候,经常会遇到local没问题,但是部署到server时候,问题依旧存在,通常这就是缓存导致

2.  Javascript和css等项目依赖关系

依赖的产生,会导致请求时间的延长,影响性能。其次,越来越多的js和cs文件,需要请求多次,而浏览器的请求每次请求是有限的,因此我们需要压缩js和cs文件,来减少请求次数,提高性能。

Q2:  为什么选择Gulp?

Gulp的核心是基于流来进行文件的压缩,而Grunt是基于临时文件形式。Gulp减少了过多临时文件的产生,关于2者对比,如下表


Grunt


Gulp


Config First


Code First


Base on file


Base on stream


3000+ plugin


1000+plugin

其次,两者的过程也不一致

Grunt: Source-->Subtask1-->Temp.-->Subtask2-->Target //subtask越多产生的temp也就越多,这些temp文件是存放于disk之上的

Gulp:  Soource-->Subtask1-->Subtask2-->gulp.dest()-->Target

在语法写法上,gulp也更简便和清晰

//grunt的语法
grunt.initConfig({
    less: {
        development: {
            files: {
                "build/tmp/app.css": "assets/app.less"
            }
        }
    },
    autoprefixer: {
        options: {
            browsers: [‘last 2 version‘, ‘ie 8‘, ‘ie 9‘]
        },
        multiple_files: {
            expand: true,
            flatten: true,
            src: ‘build/tmp/app.css‘,
            dest: ‘build/‘
        }
    }
});
grunt.loadNpmTasks(‘grunt-contrib-less‘);
grunt.loadNpmTasks(‘grunt-autoprefixer‘);
grunt.registerTask(‘css‘, [‘less‘, ‘autoprefixer‘]);
//gulp的语法
var gulp = require(‘gulp‘),
    less = require(‘gulp-less‘),
    autoprefix = require(‘gulp-autoprefixer‘);

gulp.task(‘css‘, function() {
    gulp.src(‘assets/app.less‘)
        .pipe(less())
        .pipe(autoprefix(‘last 2 version‘, ‘ie 8‘, ‘ie 9‘))
        .pipe(gulp.dest(‘build‘));
});

本文主要关于运用gulp的目的和如何运用,gulp更多的细节还请参考其他学习资料

二、创建我们的gulp

1. 安装

npm install -g gulp

2. 创建我们的gulpfile.js文件

在使用gulp的时候,我们需要创建gulpfile.js,这是npm执行gulp所定向的文件名。

a. 首先定义我们的所要压缩的文件来源和去处

var paths = {
    src : {
        jsx: ‘Scripts/App/Components/*.jsx‘,
        componentsRoot: ‘./Scripts/App/components/‘,
        app: ‘./Scripts/App/app.js‘,
        flux: ‘./Scripts/App/flux.js‘,
        scripts: ‘Scripts/**/*.js‘
    },
    dest: {
        root: ‘root‘,
        bundles: ‘root/Scripts/dist‘,
        css: ‘root/Content/Style/app‘,
        bootstrap: ‘root/Content/Style/libs/bootstrap‘,
        serverBundle: ‘serverBundle.js‘,
        clientBundle: ‘clientBundle.js‘,
        jsx: ‘Scripts/App/Components‘
    }
};

b. 其他可能需要引用的模块

var externalLibs = [
‘alt‘,
‘jQuery‘,
‘bootstrap‘
];
时间: 2024-12-26 22:33:58

一步步创建基于React+EF6+WebApi2+Gulp的项目(前端篇)的相关文章

放弃antd table,基于React手写一个虚拟滚动的表格

缘起 标题有点夸张,并不是完全放弃antd-table,毕竟在react的生态圈里,对国人来说,比较好用的PC端组件库,也就antd了.即便经历了2018年圣诞彩蛋事件,antd的使用者也不仅不减,反而有所上升. 客观地说,antd是开源的,UI设计得比较美观(甩出其他组件库一条街),而且是蚂蚁金服的体验技术部(一堆p7,p8,p9,基本都是大牛级的)在持续地开发维护,质量可以信任. 不过,antd虽好,但一些组件在某一些场景下,是很不适用的.例如,以表格形式无限滚动地展示大量数据(1w+)时,

基于react的nextjs服务端渲染框架学习使用

开发文档 https://nextjs.frontendx.cn/ 源码 该博客的示例代码我已经上传到github,欢迎star或者fork react-next-hello Next介绍 Next.js是一个基于React的一个服务端渲染简约框架.它使用React语法,可以很好的实现代码的模块化,有利于代码的开发和维护. Next.js带来了很多好的特性: 默认服务端渲染模式,以文件系统为基础的客户端路由 代码自动分隔使页面加载更快 (以页面为基础的)简洁的客户端路由 以webpack的热替换

Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法

原文:Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法 Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我们讲了Raspberry安装Win10 IoT系统及搭建Visual Studio 2015开发环境的方法(http://www.cnblogs.com/cloudtech/p/5562120.html)

基于React服务器端渲染的博客系统

系统目录及源码由此进入 目录 1. 开发前准备 1.1 技术选型1.2 整体设计1.3 构建开发 2. 技术点 2.1 react2.2 redux, react-router2.3 server-render 3. 总结 正文 1. 开发前准备 1. 1 技术选型 对于个人的博客系统而言,服务器计算能力往往不是需要考虑,而其中的 I/O 操作是比较复杂的,同理对前端的交互要求也是较高的,所以这次主要还是围绕 Node系 ,React系 框架进行开发.对于 2016 年后的互联网产品, Reac

Java开发环境的搭建以及使用eclipse从头一步步创建java项目

一.java 开发环境的搭建 这里主要说的是在windows 环境下怎么配置环境. 1.首先安装JDK java的sdk简称JDK ,去其官方网站下载最近的JDK即可..http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 点击下载好的exe文件安装即可. 2.接下来我们需要配置环境变量 xp系统下  右键'我的电脑'--属性--高级 win7 系统下  右键'计算机'--属性--高

Creating Dialogbased Win32 Application (4) / 创建基于对话框的Win32应用程序(四)Edit Control的应用、Unicode转ANSI、自动滚动 / Win32, VC++, Windows

创建基于对话框的Win32应用程序(四)——Edit Control的应用.Unicode转ANSI.自动滚动 之前的介绍中,我们用到了Button.Static Text.Checkbox这三个控件.这一节中我们将学习使用Edit Control(编辑框)控件,其中还包括Unicode转ANSI的方法.文本框自动滚动的功能等. 24.首先切换到Reasource View(Ctrl+Shift+E),找到待修改的主窗体,并从Toolbox(Ctrl+Atl+X)中添加Edit Control控

Creating Dialogbased Win32 Application (1) / 创建基于对话框的Win32应用程序(一)新建窗体 / Win32, VC++, Windows

创建基于对话框的Win32应用程序(一) —— 新建窗体 1.新建一个Visual C++的Empty Project.  2.在Solution Explorer中右键Add New Item,添加 .cpp 文件,并提供Win32应用程序的入口点函数.  3.在Solution Explorer或 Resources View 中右键Add Resource,选择Dialog.并在修改相关内容. 4.切换到 .cpp文件中,创建回调函数(Dlg_Proc),并在入口点函数中调用DialogB

基于React Native的Material Design风格的组件库 MRN

基于React Native的Material Design风格的组件库.(为了平台统一体验,目前只打算支持安卓) 官方网站 http://mrn.js.org/ Github https://github.com/binggg/mrn 示例应用在线演示 https://appetize.io/app/j48zj9r83cetpd1mhg4g8buc4w 示例应用下载 https://github.com/binggg/MaterialReactNative/blob/master/androi

js:对象的创建(基于组合和动态原型)

基于原型的创建虽然可以有效地完成封装,但是依然存在如下问题: 1.无法通过构造函数来设置属性值 2.当属性中有引用类型变量时,可能存在变量值重复 function Person(){ } Person.prototype = { constructor:Person, name:"Leon", age:30, friends:["Ada","Chris"], say:function(){ alert(this.name+"["