摘要:為了動態插入新加的和文件且添加的文件有一定順序,安裝系列包。具體參見至此已經可以在本地愉快的開發了。配置編譯任務開發完成以后代碼需要上線,繼續創建一些。有時間會加入校驗添加,添加等等。。。
源碼地址:https://github.com/silence717/angular-gulp-seed 創建一個空文件夾名字任意,此項目為angular-gulp-seed
mkdir angular-gulp-seed初始化工程
npm init創建項目基本目錄結構如下:
+src +app // 業務模塊 -app.js // 應用入口 +demo // 業務模塊目錄,所有子模塊均遵循此目錄 - module.js // 模塊聲明文件 - controller.js // vm層 - index.html // 主入口模板 - router.js // 模塊路由文件 - style.css // 模塊樣式 +home +assets // 靜態資源目錄 -images -css +common // 公共服務 +components // 公共組件 +scripts // gulp腳本 - gulp.build.js // build任務 - gulp.common.js // dev,build公共任務 - gulp.config.js // 基礎配置 - gulp.dev.js // dev任務 index.html // 主頁面 package.json正式開始coding gulp配置部分
1. 安裝gulp
npm install gulp -D
2. 新建gulpfile文件,安裝browser-sync包,配置第一個任務
var browserSync = require("browser-sync"); gulp.task("browserSync", function () { browserSync({ server: { baseDir: "./", index: "src/index.html" } }); }); gulp.task("default", ["browserSync"]); // 執行gulp命令,瀏覽器啟動,可以看到大致頁面結構
更多browser-sync的信息:http://www.browsersync.cn/。
3. 為了動態插入新加的js和css文件,且添加的文件有一定順序,安裝gulp系列包。
npm install gulp-watch gulp-inject gulp-order -D
4. 新建一個gulp.config.js文件,配置一些基本文件路徑和順序
module.exports = function () { var src = "./src/"; var build = "./dist/"; var config = { src: src, build: build, index: src + "index.html", css: [src + "**/*.css"], appJs: [src + "app/**/*.js"], commonJs: [src + "common/**/*.js"], componentJs: [src + "components/**/*.js"], jsOrder: [ "**/app.js", // 項目主入口 "**/app.*.js", // 主入口相應配置 "**/module.js", // 模塊聲明 "**/router.js", // 模塊路由 "**/index.js", // 組件、resource入口 "**/*.js" // 其他 ], cssOrder: [ "**/app.css", // 項目主模塊 "**/*.module.css", // 業務子模塊 "**/*.css" // 其他 ] } return config; }();
5. 使用gulp-inject動態插入css和js
js任務編寫
var config = require("./gulp.conf.js"); gulp.task("inject", function() { var js = gulp.src(config.js, {read: false}).pipe(order(config.jsOrder)); var css = gulp.src(config.css, {read: false}).pipe(order(config.cssOrder)); return gulp .src(config.index) .pipe(inject(js, {addPrefix: "../src", relative: true})) .pipe(inject(css, {addPrefix: "../src", relative: true})) .pipe(gulp.dest(config.src)) .pipe(browserSync.reload({stream: true})); });
頁面添加inject標識
添加到default任務中
gulp.task("default", ["inject", "browserSync"]);
執行gulp命令,可看到如圖頁面效果,同時index.html頁面內容發生變化
6. 開發過程中會不斷添加新的css和js文件,為了優化開發體驗,引入gulp-watch包添加watch任務,當js和css文件發生變化的時候,去執行inject任務
var watch = require("gulp-watch"); gulp.task("watch", function() { watch("src/**/*.js", function() { gulp.run("inject"); }); watch("src/**/*.css", function() { gulp.run("inject"); }); }); gulp.task("default", ["inject", "browserSync", "watch"]);編寫業務代碼
1. 安裝angular相關包
npm install angular angular-ui-router --save
2. 由于代碼量過大,不貼出具體參見src/spp下面代碼實現
src/index.html
src/app.js 項目主入口
src/app.router.js 項目路由配置
mock數據服務為了前端保持獨立,使用express搭建一個mock服務,然后我們就能愉快的開始開發了。
1. 首先安裝依賴包:
npm install express body-parser json-server http-proxy-middleware -D
2. 創建server.js,內容如下:
var jsonServer = require("json-server"); var server = jsonServer.create(); var middlewares = jsonServer.defaults(); var bodyParser = require("body-parser"); var mockRouter = require("./mock/index"); // 添加默認的中間件 logger, static, cors and no-cache server.use(middlewares); // 解析 body server.use(bodyParser.json()); server.use(bodyParser.urlencoded({ extended: false })); server.use(mockRouter); server.listen(4000, function() { console.log("God bless me no bug, http://localhost:4000"); });
3. mock文件夾下創建index.js,內容如下:
var fs = require("fs"); var express = require ("express"); var router = express.Router(); fs.readdirSync("mock").forEach(function(route) { if (route.indexOf("index") === -1) { require("./" + route)(router); } }); module.exports = router;
4. 引入angular-resource.js,使用$resource服務
npm install angular-resource --save
在common/resource/創建一個utils,具體文件為resourceUtils,為所有請求添加統一前綴
(function() { angular .module("app.resource") .factory("resourceUtils", resourceUtils) .factory("webResource", webResource); resourceUtils.$inject = ["$resource"]; function resourceUtils($resource) { return function(apiPrefix) { return function(url, params, actions) { return $resource(apiPrefix + url, params, actions); }; }; } webResource.$inject = ["resourceUtils"]; function webResource(resourceUtils) { // 其中***為后端服務的統一前綴 return resourceUtils("/***/"); } })();
關于$resource服務的使用,請參考這篇文章。https://silence717.github.io/2016/09/28/creating-crud-app-minutes-angulars-resource/
5. 在gulpfile.js中統一配置代理,并且修改browserSync任務:
// 引入http-proxy-middleware var proxyMiddleware = require("http-proxy-middleware"); // 配置代理路徑,是否為本地mock var isLocal = true; var target = ""; if (isLocal) { target = "http://localhost:4000"; } else { // API address } // browserSync任務添加代理 gulp.task("browserSync", function() { var middleware = proxyMiddleware(["/***/"], {target: target, changeOrigin: true}); browserSync({ server: { baseDir: "./", index: "src/index.html", middleware: middleware } }); });
6. 你可能需要添加一些公共的interceptor去處理后端返回的數據或者請求出錯的統一處理。具體參見[https://docs.angularjs.org/api/ng/service/$http](https://docs.angularjs.org/api/ng/service/$http).
至此已經可以在本地愉快的開發了。
配置gulp編譯任務開發完成以后代碼需要build上線,繼續創建一些task。
1. 安裝相關依賴包
npm install gulp-angular-templatecache gulp-minify-css gulp-if gulp-useref gulp-uglify gulp-replace -D
2. 配置build任務,具體在scripts/gulp.build.js文件中. 3. 頁面html遇到build的地方配置
... ...我將gulp的任務全部獨立出去管理,這樣使得gulpfile.js更加清晰
var gulp = require("gulp"); var del = require("del"); var runSequence = require("run-sequence"); var config = require("./scripts/gulp.conf.js"); var buildTask = require("./scripts/gulp.build.js"); var devTask = require("./scripts/gulp.dev.js"); var commonTask = require("./scripts/gulp.common.js"); // 動態添加css和js到index.html gulp.task("inject", function() { commonTask.inject(); }); // 添加監聽任務 gulp.task("watch", function() { devTask.watch(); }); // 使用browerSync啟動瀏覽器 gulp.task("browserSync", function() { devTask.browserSync(); }); // 清除dist文件 gulp.task("clean", function() { del(config.build); }); // 打包組件模板 gulp.task("build:components-templates", function() { buildTask.componentsTemplate(); }); // 打包業務模板 gulp.task("build:app-templates", function () { buildTask.appTemplate(); }); // build index文件 gulp.task("build", ["build:components-templates", "build:app-templates"], function() { buildTask.buildIndex(); }); // 本地開發 gulp.task("default", ["inject", "browserSync", "watch"]); // 線上環境打包 gulp.task("dist", ["clean"], function() { runSequence("inject", "build"); });在package.json中配置腳本
"scripts": { "start": "concurrently "gulp" "node server.js"" }
執行npm start即可本地啟動項目
上線合并代碼的時候執行gulp dist命令即可
拖延癥晚期,終于寫完了。有時間會加入eslint校驗,添加md5,添加sass等等。。。需要做的還有很多,看心情吧!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/50213.html
摘要:為了動態插入新加的和文件且添加的文件有一定順序,安裝系列包。具體參見至此已經可以在本地愉快的開發了。配置編譯任務開發完成以后代碼需要上線,繼續創建一些。有時間會加入校驗添加,添加等等。。。 源碼地址:https://github.com/silence717/angular-gulp-seed 創建一個空文件夾名字任意,此項目為angular-gulp-seed mkdir angu...
摘要:列表是中數據類型其中的一種關鍵字是。列表是一種可變序列類型我們可以追加插入刪除和替換列表中的元素。 列表是python中數據類型其中的一種,關鍵字是list。列表(list)是一種可變序列類型,我們可以追加、插入、刪除和 替換列表中的元...
摘要:接著我們將數據流按照單詞字段即號索引字段做分組,這里可以簡單地使用方法,得到一個以單詞為的數據流。得到的結果數據流,將每秒輸出一次這秒內每個單詞出現的次數。最后一件事就是將數據流打印到控制臺,并開始執行最后的調用是啟動實際作業所必需的。 本文轉載自 Jark’s Blog ,作者伍翀(云邪),Apache Flink Committer,阿里巴巴高級開發工程師。 本文將從開發環境準備、創建 ...
閱讀 3020·2021-11-16 11:42
閱讀 3666·2021-09-08 09:36
閱讀 953·2019-08-30 12:52
閱讀 2486·2019-08-29 14:12
閱讀 777·2019-08-29 13:53
閱讀 3587·2019-08-29 12:16
閱讀 646·2019-08-29 12:12
閱讀 2475·2019-08-29 11:16