[AngularJS]项目框架搭建-MyFirst Skeleton

前文有提到过 做一个简单的订餐系统,最近花了点时间,了解了一下AngularJS框架的使用。因此本文的目的根据了解的知识重新搭建基于 AngularJS框架. 该框架是基于对于AngularJS的学习而制定的,这其中肯定有很多不足,在以后的学习中在加以改进。

一。系统准备

安装Node.js version>=0.10.0版本

Git  Shell 并添加该 Shell脚本到Path环境变量中  Path=:,"$git_home/bin"  

二。手动搭建框架

2.1 创建开发目录

cd $PROJECT_HOME$

mkdir client

cd client

mkdir app

mkdir test

mkdir dist

2.2 配置文件package.json

创建一个空的package.json文件,并且修改该package.json文件 内容如下:

  package.json文件是NPM package管理的具体配置文件,当npm执行时则会解析该文件中的内容。具体请看https://docs.npmjs.com/files/package.json

{  "name": "client",  "version": "1.0.0",  "private": true,  "description": "A skeleton based on angularJS",  "dependencies": {},  "repository":  { "type" : "git", "url" : "https://github.com/hlxinyan/AngularJSSkeleton.git"},  "devDependencies": {    "grunt": "^0.4.5",    "grunt-autoprefixer": "^2.0.0",    "grunt-concurrent": "^1.0.0",    "grunt-contrib-clean": "^0.6.0",    "grunt-contrib-compass": "^1.0.0",    "grunt-contrib-concat": "^0.5.0",    "grunt-contrib-connect": "^0.9.0",    "grunt-contrib-copy": "^0.7.0",    "grunt-contrib-cssmin": "^0.12.0",    "grunt-contrib-htmlmin": "^0.4.0",    "grunt-contrib-imagemin": "^0.9.2",    "grunt-contrib-jshint": "^0.11.0",    "grunt-contrib-uglify": "^0.7.0",    "grunt-contrib-watch": "^0.6.1",    "grunt-filerev": "^2.1.2",    "grunt-google-cdn": "^0.4.3",    "grunt-karma": "^0.10.1",    "grunt-newer": "^1.1.0",    "grunt-ng-annotate": "^0.9.2",    "grunt-svgmin": "^2.0.0",    "grunt-usemin": "^3.0.0",    "grunt-wiredep": "^2.0.0",    "jshint-stylish": "^1.0.0",    "karma": "~0.12",    "karma-jasmine": "^0.3.5",    "karma-phantomjs-launcher": "^0.1.4",    "load-grunt-tasks": "^3.1.0",    "time-grunt": "^1.0.0",    "protractor": "^1.1.1",    "http-server": "^0.6.1",    "bower": "^1.3.1",    "shelljs": "^0.2.6",    "karma-junit-reporter": "^0.2.2"  },  "dependencies": {    "angular-resource": "^1.3.15"  },  "engines": {    "node": ">=0.10.0"  },  "scripts": {    "postinstall": "bower install",

    "prestart": "npm install",    "start": "http-server -a localhost -p 8000 -c-1",

    "pretest": "npm install",    "test": "karma start karma.conf.js",    "test-single-run": "karma start karma.conf.js  --single-run",

    "preupdate-webdriver": "npm install",    "update-webdriver": "webdriver-manager update",

    "preprotractor": "npm run update-webdriver",    "protractor": "protractor e2e-tests/protractor.conf.js",

    "update-index-async": "node -e \"require(‘shelljs/global‘); sed(‘-i‘, /\\/\\/@@[email protected]@[\\s\\S]*\\/\\/@@[email protected]@/, ‘//@@[email protected]@\\n‘ + sed(/sourceMappingURL=angular-loader.min.js.map/,‘sourceMappingURL=bower_components/angular-loader/angular-loader.min.js.map‘,‘app/bower_components/angular-loader/angular-loader.min.js‘) + ‘\\n//@@[email protected]@‘, ‘app/index-async.html‘);\""  }}

 

2.3 配置bower

2.3.1 创建一个.bowerc文件,并修改该文件内容如下:

http://bower.io/docs/config/#placement--order

{
  "directory": "app/bower_components",
 "analytics": false
  "interactive": false
}

 

2.3.2 创建一个空的bower.json文件,并且修改该bower.json文件 .

http://bower.io/docs/creating-packages/#maintaining-dependencies

{
  "name": "client",
  "version": "0.0.0",
  "dependencies": {
    "angular": "^1.3.0",
    "bootstrap-sass-official": "^3.2.0",
    "angular-animate": "^1.3.0",
    "angular-cookies": "^1.3.0",
    "angular-resource": "^1.3.0",
    "angular-route": "^1.3.0",
    "angular-sanitize": "^1.3.0",
    "angular-touch": "^1.3.0"
  },
  "devDependencies": {
    "angular-mocks": "^1.3.0"
  },
  "appPath": "app",
  "moduleName": "clientApp"
}

 

2.4 安装包

npm install

  在执行install后,在client目录下将会看到 新增的node_modules 以及在  client/app目录下看到 bower_components。 具体如图所表示:

  

2.5 配置单元测试

cd $PROJECT_HOME/client/test

mkdir unit

创建karma.conf.js文件,并编辑其内容如下:

module.exports = function (config) {
  config.set({

    basePath: ‘../‘,

    files: [
      ‘app/bower_components/angular/angular.js‘,
      ‘app/bower_components/angular-route/angular-route.js‘,
      ‘app/bower_components/angular-resource/angular-resource.js‘,
      ‘app/bower_components/angular-mocks/angular-mocks.js‘,
      ‘app/js/**/*.js‘,
      ‘test/unit/**/*.js‘
    ],

    autoWatch: true,

    frameworks: [‘jasmine‘],

    browsers: [‘Chrome‘],

    plugins: [
      ‘karma-chrome-launcher‘,
      ‘karma-firefox-launcher‘,
      ‘karma-jasmine‘
    ],

    junitReporter: {
      outputFile: ‘test_out/unit.xml‘,
      suite: ‘unit‘
    }

  });
};

执行npm test

2.6 配置E2E测试

cd $PROJECT_HOME/client/test

mkdir e2e

创建protractor.conf.js文件,并编辑其内容如下:

exports.config = {
  allScriptsTimeout: 11000,

  specs: [
    ‘e2e/*.js‘
  ],

  capabilities: {
    ‘browserName‘: ‘chrome‘
  },

  baseUrl: ‘http://localhost:8000/app/‘,

  framework: ‘jasmine‘,

  jasmineNodeOpts: {
    defaultTimeoutInterval: 30000
  }
};

执行

现在一个console启动npm start

在另一个console启动npm run protractor

3.制作一个空的页面

cd client/app

cd client/app/js 创建一个app.js

cd client/app/css  创建一个 app.css

创建一个index.html

<!doctype html>
<html lang="en" ng-app="clientApp">
<head>
  <meta charset="utf-8">
  <title>Online Food Ordering</title>
  <!-- build:css css/main.css -->
  <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css">
  <link rel="stylesheet" href="css/app.css">
  <!-- endbuild -->

  <!-- build:js js/main.js -->
  <!-- jQuery is used for JavaScript animations (include this before angular.js) -->
  <script src="bower_components/jquery/dist/jquery.js"></script>
  <!-- required module to enable animation support in AngularJS -->
  <script src="bower_components/angular/angular.js"></script>
  <script src="bower_components/angular-route/angular-route.js"></script>
  <script src="bower_components/angular-animate/angular-animate.js"></script>
  <script src="bower_components/angular-resource/angular-resource.js"></script>
  <script src="js/app.js"></script>
  <!-- endbuild -->
</head>

<body>
<div class="view-container">
  <div ng-view class="view-frame"></div>
</div>
</body>
</html>

 

其中把 css部分用:

<!-- build:css css/main.css –>  <!-- endbuild --> 给包括起来

把JS部分用

<!-- build:js js/main.js –> <!—endbuild -->  给包括起来

4.项目打包

cd $PROJECT_HOME/client 创建一个Gruntfile.js,编辑内容如下:

/*jslint node: true */
"use strict";

module.exports = function(grunt) {

  grunt.initConfig({
    pkg: grunt.file.readJSON(‘package.json‘),

    copy: {
      main: {
        src: ‘app/index.html‘,
        dest: ‘dist/index.html‘
      }
    },

    useminPrepare: {
      html: ‘app/index.html‘,
      options: {
        dest: ‘dist‘
      }
    },
    usemin: {
      html: [‘dist/index.html‘]
    },

    jshint: {
      all: [ ‘Gruntfile.js‘, ‘app/*.js‘, ‘app/js/*.js‘ ]
    },
    uglify: {
      options: {
        report: ‘min‘,
        mangle: false
      }
    },
    clean: {
      temp: {
        src: [ ‘tmp‘ ]
      }
    }

  });

  grunt.loadNpmTasks(‘grunt-contrib-jshint‘);
  grunt.loadNpmTasks(‘grunt-contrib-clean‘);
  grunt.loadNpmTasks(‘grunt-contrib-connect‘);
  grunt.loadNpmTasks(‘grunt-contrib-compress‘);
  grunt.loadNpmTasks(‘grunt-contrib-concat‘);
  grunt.loadNpmTasks(‘grunt-contrib-uglify‘);
  grunt.loadNpmTasks(‘grunt-html2js‘);
  grunt.loadNpmTasks(‘grunt-contrib-watch‘);
  grunt.loadNpmTasks(‘grunt-bower-task‘);
  grunt.loadNpmTasks(‘grunt-karma‘);
  grunt.loadNpmTasks(‘grunt-usemin‘);
  grunt.loadNpmTasks(‘grunt-contrib-cssmin‘);
  grunt.loadNpmTasks(‘grunt-contrib-copy‘);

  grunt.registerTask(‘default‘, [ ‘jshint‘, ‘clean‘,‘copy‘, ‘useminPrepare‘, ‘concat‘, ‘uglify‘, ‘cssmin‘, ‘usemin‘ ]);

};

 

在控制台执行 grunt,运行结果如下:

 

单击dist/index.html 可以看到js以及css  都被合成一个文件,具体如下:

<!doctype html>
<html lang="en" ng-app="clientApp">
<head>
  <meta charset="utf-8">
  <title>Online Food Ordering</title>
  <link rel="stylesheet" href="css/main.css">

  <script src="js/main.js"></script>
</head>

<body>
<div class="view-container">
  <div ng-view class="view-frame"></div>
</div>
</body>
</html>

 

到此该项目框架搭建结束了,对于gruntfile目前只是用来文件的合并和压缩,而包管理 则直接使用   bower,单元测试 则直接使用 karma,e2e测试则使用protractor.

 

5. 提交Git

git add –A

git commit –m  ‘myfirst skeleton’

git remote add  myskeleton https://github.com/hlxinyan/AngularJSSkeleton.git

git push -u  myskeleton master

时间: 2024-10-07 23:18:21

[AngularJS]项目框架搭建-MyFirst Skeleton的相关文章

1、Android项目框架搭建 (分析需求、整理资料)

闲来无事.想搭个框架试试 分析一般应用 将资料整理整理 粗略统计 需要以下资料 1.android-pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉刷新 ListView.ViewPager.WevView.ExpandableListView.GridView.(Horizontal )ScrollView.Fragment上下左右拉动刷新,比下面johannilsson那个只支持ListView的强大的多.并且他实现的下拉刷新ListView在item不足一屏情况下也

(三) Angular2项目框架搭建心得

前言: 在哪看到过angular程序员被React程序员鄙视,略显尴尬,确实Angular挺值得被调侃的,在1.*版本存在的几个性能问题,性能优化的"潜规则"贼多,以及从1.*到2.*版本的面目全非,不过宽容点来看这个强大的框架,升级到ng2肯定是一件好事情,虽然截至目前ng2还存在或多或少需要完善的地方,但是ng2做到了留下并强化ng1好的部分,移除或改善其不好的部分,并且基于许多较新Web技术来开发,不去看从ng1迁移到ng2的门槛和工作量的话,ng2的编程体验是很酷炫的. 目前n

第一节项目框架搭建

动软代码生成器的使用 创建三个类库项目DAL.BLL.Model,创建两个asp.net应用程序Web:Front(前台).Admin(后台管理).DAL引用Model,BLL引用Model和DAL,Web引用BLL和Model. 如果报错“添加服务器配置失败”,则以管理员身份运行“动软代码生成器”. (*)根据我的表命名规范,配置“动软”的“选项”→“代码生成器设置”,命名规则中“替换表中的字符”填“T_”(大小写敏感),“类命名规则”中,除了Model最后一个文本框留空之外,其他两个填BLL

ASP.NET MVC企业级项目框架搭建实战

MVC项目搭建笔记---- 项目框架采用ASP.NET MVC+Entity Framwork+Spring.Net等技术搭建,搭建过程内容比较多,结合了抽象工厂的思想降低了三层之间的耦合,可以使用此套框架进行可扩展性要求高的企业级MVC项目开发.本框架的架构图如下: 第一步(创建分类文件夹): 创建5个文件夹.分别为UI,Model,BLL,DAL,Common,以便于将各模块分类整理. 第二步(项目类库的创建): 在UI文件夹创建ASP.NET MVC4项目模板选择基本. 在Model文件夹

记录-项目java项目框架搭建的一些问题(maven+spring+springmvc+mybatis)

伴随着项目框架的落成后,本以为启动就能成功的,but.... 项目启动开始报错误1:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 这个错百度到说是缺少这个包,但实际在项目中看到maven里面是有这个包的.于是继续百度到[可能包是找到了,但没有依赖在项目中] 项目右击-----project-----deployment assembly , add ,java bui

2.0项目框架搭建

2.1.科学减肥网: http://www.kxjf1.com 项目架构如下 解决方案分层 01UI KXJF.Helper(web.wap帮助类库) KXJF.Logic(web控制器逻辑) KXJF.Logic.SysAdmin(web后台控制器逻辑) KXJF.Logic.Wap(wap控制器逻辑) KXJF.UrlProvider(URL优化,提供良好的URL) 02Service KXJF.IBLL(业务逻辑接口层) KXJF.BLL(业务逻辑实现层) 03Repository KXJ

springmvc+mybatis+maven项目框架搭建

项目的目录 1.配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com

浅谈 WPF 项目框架搭建

在WPF项目开发中最常用的开发模式无疑是MVVM模式,  MVVM模式开发的好处,在这里就不详细讨论, 还有 本文中所使用MVVMLight框架,为什么使用MVVM框架(1.框架较轻,2.学习成本低.3.适用大多数中小型项目,4.相对于微软的prism框架更容易上手)    下面开始 一步一步 搭建框架 第一步: 利用反射创建VM构造器 public class ViewModelFactory { private static Dictionary<string, object> vmMap

Java项目框架搭建系列(Java学习路线)

前言: 已经工作4年,真是时间飞逝. 其实当你在一间公司工作一两年之后,公司用到的开发框架的基本使用你应该都会了. 你会根据一个现有项目A复制一下搭建出另外一个类似框架的项目B,然后在项目B上进行业务逻辑开发. 如果你更努力一点,你可能有去摸索一些配置的作用,一些问题的排查会更有经验和自己的想法. 如果你好奇心更强一点,可能会去了解一些框架的原理,各个框架之间是怎么相互协助工作的.自己能否从无到有将这些框架串联起来. 想写一系列这样的文章:将Java项目开发过程中的一些框架,如何一步步串联起来,