前端开发环境(2017)

关于开发环境

1、面试官想通过开发环境了解面试者的经验;

2、开发环境,最能体现工作产出的效率;

3、会以聊天的形式为主,而不是出具体的问题。

 

开发环境的内容包含

1、IDE(写代码的效率);

2、git(代码版本管理,多人写作开发);

3、JavaScript模块化;

4、打包工具(webpack);

5、上线回滚的流程。

 

IDE介绍

1、webstorm;

2、sublime;

3、vscode;

4、atom。

(以上编辑器的插件非常重要!)

 

Git介绍

前言:正式项目都需要代码版本管理;大型项目都需要多人写作开发;Git和linux都是同一个作者。

常用的Git命令:

1、git add .;

2、git checkout xxx;

3、git commit -m “xxx”;

4、git push origin master;

5、git pull origin master;

6、git branch;

7、git checkout -b xxx / git checkout xxx;

8、git merge xxx;

更多

 

模块化介绍

1、不使用模块化的情况

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script type="text/javascript" src="js/util.js" ></script>
        <script type="text/javascript" src="js/a-util.js" ></script>
        <script type="text/javascript" src="js/a.js" ></script>
    </head>
    <body>
        <!--1、以上JavaScript代码中的函数必须是全局变量,才能暴露给使用方,全局变量的污染-->
        <!--2、a.js知道要引用a-util.js,但是不知道还需要依赖于util.js-->
    </body>
</html>


//util.js
function getFormatDate(date,type){
    //type === 1 返回2017-11-08
    //type === 2 返回2017年11月8日
}

//a-util.js
function aGetFormatDate(date){
    return getFormatDate(date,2);
}

//a.js
var dt = new Date();
console.log(aGetFormatDate(dt));

 

2、使用模块化(我们可以更方便地使用别人的代码,想要什么功能,就加载什么模块。)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script type="text/javascript" src="js/a.js" ></script>
    </head>
    <body>
        <!--直接引用a.js,其他的根据依赖关系自动引用那两个函数,没必要做成全局变量,不会带来污染和覆盖-->
    </body>
</html>


//util.js
export{
    function getFormatDate(date,type){
        //type === 1 返回2017-11-08
        //type === 2 返回2017年11月8日
    }
}

//a-util.js
var getFormatDate = require('util.js');
export{
    aGetFormatDate:function(date){
        return getFormatDate(date,2);
    }
}

//a.js
var aGetFormatDate = require('a-util.js');
var dt = new Date();
console.log(aGetFormatDate(dt));

 

3、AMD

全称是Asynchronous Module Definition,即异步模块加载机制。作为一个规范,只需定义其语法API,而不关心其实现,AMD规范简单到只有一个API,即define函数:

define([module-name?], [array-of-dependencies?], [module-factory-or-object]);

其中:

module-name: 模块标识,可以省略;

array-of-dependencies: 所依赖的模块,可以省略;

module-factory-or-object: 模块的实现,或者一个JavaScript对象。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <p>AMD test</p>
        <script type="text/javascript" src="js/require.js" data-main = "./main.js"></script>
    </body>
</html>


//main.js(和html同个文件夹)
require(['./js/a.js'],function(a){
    var date = new Date();
    a.printDate(date);
})

//a.js
define(['./a-util.js'],function(aUtil){
    var a = {
        printDate:function(date){
            console.log(aUtil.aGetFormatDate(date));
        }
    }
    return a;
})

//a-util.js
define(['./util.js'],function(util){
    var aUtil = {
        aGetFormatDate:function(date){
            return util.getFormatDate(date,2);
        }
    }
    return aUtil;
})

//util.js
define(function(){
    var util = {
        getFormatDate:function(date,type){
            if(type === 1){
                return "2017-11-09";
            }else{
                return "2017年11月9日";
            }
        }
    }
    return util;
})

更多require.js知识 

 

4、 CommonJS

CommonJS定义的模块分为:{模块引用(require)} {模块定义(exports)} {模块标识(module)}

require()用来引入外部模块;exports对象用于导出当前模块的方法或变量,唯一的导出口;module对象就代表模块本身。

node.js模块化系统是参照CommonJS规范实现的,现在被大量用于前端,原因是:前端开发依赖的插件和库,都可以从npm中获取;构建工具的高度自动化,使得使用npm的成本非常低。

CommonJS不会异步加载JS,而是同步一次性加载出来。

 

5、AMD和CmmonJS的使用场景

需要异步加载JS,使用AMD;

使用了npm之后建议使用CommonJS。

 

6、其他

安装本地服务器:

打开cmd=>cd 目录=>npm install http-server -g=>http-server -p 端口号

访问:

http://localhost:端口号/index.html

 

 

webpack介绍

WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其转换和打包为合适的格式供浏览器使用。

使用步骤:

1、cd 项目地址

2、初始化:npm init

3、安装webpack:npm install webpack --save-dev

   (卸载命令:npm uninstall 名字 --save)

4、安装库(jQuery):npm install jquery --save-dev(-dev可以选择不写)

5、配置文件:

//webpack.config.js
//
获得node.js中一个path对象 var path =require('path'); //获得安装好的webpack对象 var webpack = require('webpack'); module.exports = { //寻找src目录 context:path.resolve(__dirname,'./src'), //入口文件 entry:{ app:'./app.js'; }, output:{ path:path.resolve(__dirname,'./dist'), filename:'bundle.js' } }

6、执行命令:webpack

7、使用jQuery:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <div>test</div>
        <div id="root"></div>
        <script type="text/javascript" src="dist/bundle.js" ></script>
    </body>
</html>


//app.js
//得到jQuery对象 var $ = require('jquery') var $root = $('#root') $root.html('<p>这是jQuery插入的文字</p>')

8、压缩代码:

//获得node.js中一个path对象
var path =require('path');
//获得安装好的webpack对象
var webpack = require('webpack');

module.exports = {
    //寻找src目录
    context:path.resolve(__dirname,'./src'),
    //入口文件
    entry:{
        app:'./app.js'
    },
    output:{
        path:path.resolve(__dirname,'./dist'),
        filename:'bundle.js'
    },
    plugins:[
        new webpack.optimize.UglifyJsPlugin()
    ]
}

 

上线和回滚

上线和回滚的基本流程要点:

1、将测试完成的代码提交到git版本库的master分支;

2、将当前服务器的代码全部打包并记录版本号,备份;

3、将master分支的代码提交覆盖到线上服务器,生成新版本号。

 

linux基本命令:

 

posted @ 2017-11-09 17:08  Z皓  阅读(3965)  评论(0编辑  收藏  举报