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

摘要:
如前所述,我们构建了一个简单的订餐系统。最近,我们花了一些时间来了解AngularJS框架的使用。因此,本文的目的是基于所学知识重建AngularJS框架。该框架基于对Angular JS的研究。它肯定有许多不足之处,将在今后的研究中加以改进。系统已准备好安装节点。jsversion˃=0.10.0GitShell,并将shell脚本添加到Path环境变量Path=:,“$git_home/bin”II中。

前文有提到过 做一个简单的订餐系统,最近花了点时间,了解了一下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', /\/\/@@NG_LOADER_START@@[\s\S]*\/\/@@NG_LOADER_END@@/, '//@@NG_LOADER_START@@\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//@@NG_LOADER_END@@', '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。 具体如图所表示:

npm

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,运行结果如下:

grunt2grunt

单击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

免责声明:文章转载自《[AngularJS]项目框架搭建-MyFirst Skeleton》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇kali环境下进行wifi密码爆破开放API接口签名验证下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

为什么建议js代码放在&amp;lt;/body&amp;gt;前

理论上来说js标签放在html文档的任何位置都可以,规范起见,推荐放到body结束标签的末尾,包含到body标签内: <body> <!-- 这里是其他的HTML标签 --> <script> // 这里是代码 </script> </body> 这样处理的好处是无需担心因页面未...

js如何读写txt文件?(曲线救国篇)

。emmm,不存在的。做不到的。 但是,你可以继续往下阅读,或许能实现你想要的功能。 前言:一般我们需要用js来实现文件读写,都是一些比较小的,离线的应用(因为如果可以联网,什么json什么db都任意操作再也没那么多麻烦事情了)。 但是,就是只能离线,还就想要把js运行过程中生产的数据保存到文本文件中,要怎么办呢? js是不能直接读写文件的。我先下面要介绍...

JS中图片飞飞效果

当鼠标在界面上移动的时候,后面有一连串的图片跟随者一起飘动,效果如下:       实现的基本思想:准备五个img标签,为了方便控制都放在一个div里面,设置div的定位方式为 fixed,设置成这中定位方式主要是为了解决在页面出现滚动条的情况下,图片还能够跟随鼠标移动。然后再鼠标移动的时候,延时给每一个图片设置定位的left和top距离就OK了。HTM...

JS原生请求的方法XHR对象

XMLHttpRequest是一个浏览器接口,使得Javascript可以进行HTTP(S)通信。 最早,微软在IE 5引进了这个接口。因为它太有用,其他浏览器也模仿部署了,ajax操作因此得以诞生。 但是,这个接口一直没有标准化,每家浏览器的实现或多或少有点不同。HTML 5的概念形成后,W3C开始考虑标准化这个接口。2008年2月,就提出了XMLHtt...

前端常见跨域解决方案(全)

什么是跨域? 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。 跨域的根本原因就是浏览器,所以在后台是不存去前端一样上的跨域的,后台调后台是不会跨域的,但是必须网络是通的 广义的跨域: 1.) 资源跳转: A链接、重定向、表单提交 2.) 资源嵌入: <link>、<script>、<img>...

LodopJS代码模版的加载和赋值

Lodop模版有两种方法,一种是传统的JS语句,可以用JS方法里的eval来执行,一种是文档式模版,是特殊格式的base64码,此篇博文介绍JS模版的加载和赋值。两种模版都可以存入一下地方进行调用,比如数据库等。 JS模版的生成,可查看本博客的相关博文:Lodop的JS模版代码、文档式模版 生成加载赋值博文索引 关于该JS模版的加载,需要使用JS里的一个方...