npm start run result
$ npm start
> voteapp@1.0.0 start E:\project\PumpkinCage\Pumpkin\server
> set NODE_ENV=development&& gulp default
[15:53:55] Using gulpfile E:\project\PumpkinCage\Pumpkin\server\gulpfile.js
[15:53:55] Starting "default"...
[15:53:55] Starting "build"...
[15:53:55] Starting "clean"...
[15:53:55] Finished "clean" after 30 ms
[15:53:55] Starting "fonts"...
[15:53:55] Starting "copy"...
[15:53:55] Starting "less"...
[15:53:55] Starting "js"...
[15:53:55] Starting "img"...
[15:53:55] gulp-fontmin: Minified 1 font
[15:53:55] Finished "less" after 409 ms
[15:53:55] Finished "copy" after 411 ms
[15:53:55] Finished "img" after 414 ms
[15:53:55] Finished "fonts" after 429 ms
[15:53:55] Finished "js" after 422 ms
[15:53:55] Starting "html"...
[15:53:55] Finished "html" after 47 ms
[15:53:55] Finished "build" after 512 ms
[15:53:55] Starting "nodemon"...
[15:53:55] [nodemon] 1.11.0
[15:53:55] [nodemon] to restart at any time, enter `rs`
[15:53:55] [nodemon] watching: *.*
[15:53:55] [nodemon] starting `node app`
[15:53:55] Finished "nodemon" after 98 ms
[15:53:55] Starting "browser-sync"...
[15:53:56] Finished "browser-sync" after 26 ms
[15:53:56] Starting "watch"...
:3000
:development
[BS] Proxying: http://localhost:3000
[BS] Access URLs:
--------------------------------------
Local: http://localhost:7000
External: http://192.168.1.176:7000
--------------------------------------
UI: http://localhost:3001
UI External: http://192.168.1.176:3001
--------------------------------------
[BS] Watching files...
package.json partial code
"scripts": {
"start": "set NODE_ENV=development&& gulp default",
"pro": "set NODE_ENV=production& npm run build& node app",
"restart": "forever restart bin/www",
"stop": "forever stop bin/www",
"build": "gulp build",
"test": "node bin/www"
}
gulpfile.js file
"use strict";
var path = require("path");
var del = require("del");
var browserSync = require("browser-sync");
var runSequence = require("run-sequence");
var gulp = require("gulp");
var gulpif = require("gulp-if");
var minify = require("gulp-clean-css");
var nodemon = require("gulp-nodemon");
var cache = require("gulp-cache");
var uglify = require("gulp-uglify");
var htmlmin = require("gulp-htmlmin");
var fontmin = require("gulp-fontmin");
var less = require("gulp-less");
var concat = require("gulp-concat");
var jshint = require("gulp-jshint");
var cssBase64 = require("gulp-base64");
var autoprefixer = require("gulp-autoprefixer");
var rev = require("gulp-rev-ayou");
var revCollector = require("gulp-rev-collector-ayou");
var reload = browserSync.reload;
var NODE_ENV = process.env.NODE_ENV;
var staticPath = "dist/static/";
//
// var zh_CN = require("./lang/zh_CN");
// var text = (function() {
// var _text = "";
// function TraversalObject(obj) {
// for (var a in obj) {
// if (typeof (obj[a]) == "object") {
// TraversalObject(obj[a]); //
// }
// else {
// _text += obj[a];
// }
// }
// }
// TraversalObject(zh_CN);
// return _text + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.,;:\"(!?)+-*/=";
// })()
var text = "fdg"
//
gulp.task("clean", function(cb) {
return del(["dist/static/", "dist/views/"]);
});
// lib
gulp.task("copy", function(cb) {
return gulp.src("./public/lib/**/*")
.pipe(gulp.dest(staticPath + "lib"))
});
// fonts
gulp.task("fonts", function() {
return gulp.src("./public/fonts/**/*")
.pipe(fontmin({
text: text
}))
.pipe(gulp.dest(staticPath + "fonts"))
});
// html
gulp.task("html", function() {
return gulp.src(["dist/rev/**/*.json", "views/**/*.html"])
.pipe(revCollector())
.pipe(htmlmin({collapseWhitespace: true, minifyCSS: true, minifyJS: true}))
.pipe(gulp.dest("dist/views/"))
});
// less
gulp.task("less", function () {
return gulp.src("public/less/**/*.less")
.pipe(less({
paths: [ path.join(__dirname, "less", "includes") ]
}))
.pipe(cssBase64())
.pipe(autoprefixer({
browsers: ["last 2 versions", "Android >= 4.0", "last 3 Safari versions"],
cascade: true, // :true :
//-webkit-transform: rotate(45deg);
// transform: rotate(45deg);
remove:true // :true
}))
.pipe(minify())
.pipe(rev())
.pipe(gulp.dest(staticPath + "css"))
.pipe(rev.manifest())
.pipe(gulp.dest("dist/rev/css"))
});
// js
gulp.task("js", function () {
return gulp.src("public/js/**/*.js")
// .pipe(jshint({
// }))
// .pipe(jshint.reporter("default"))
.pipe(gulpif(
NODE_ENV === "production" || NODE_ENV === "test",
uglify({ compress: true }))
)
.pipe(rev())
.pipe(gulp.dest(staticPath + "js"))
.pipe(rev.manifest())
.pipe(gulp.dest("dist/rev/js"))
});
// img
gulp.task("img", function() {
return gulp.src(["public/img/**/*","public/img/*"]) //Img
.pipe(gulp.dest(staticPath + "img"));
});
// 7000Express3000
gulp.task("browser-sync", function() {
var files = ["views/**/*.*","css/*.*","css/**/*.*","js/*.*","img/*.*"].map((a) => {
return staticPath + a;
})
browserSync.init(null, {
proxy: "http://localhost:3000",
files: files,
port: 7000
});
});
// Express
gulp.task("nodemon", function (cb) {
var started = false;
return nodemon({
script: "app"
}).on("start", function () {
// to avoid nodemon being started multiple times
// thanks @matthisk
if (!started) {
cb();
started = true;
}
});
});
gulp.task("build", function (cb) {
runSequence("clean", ["fonts", "copy", "less", "js", "img"], "html", cb);
});
gulp.task("less-watch", ["less"], reload);
gulp.task("js-watch", ["js"], reload);
gulp.task("img-watch", ["img"], reload);
gulp.task("html-watch", ["html"], reload);
gulp.task("watch", function (cb) {
// css
gulp.watch("public/less/**/*.less", ["less-watch"]);
// .js
gulp.watch("public/js/**/*.js", ["js-watch"]);
// lib
// gulp.watch("public/lib/jquery-plugins/*.js", ["copy-watch"]);
//
gulp.watch("public/img/**/*", ["img-watch"]);
// ejs
gulp.watch("views/**/*.html", ["html-watch"]);
});
gulp.task("default", function(cb) {
runSequence("build", "nodemon", ["browser-sync", "watch"]);
});
app.js
var express = require("express");
var path = require("path");
var favicon = require("serve-favicon");
var cookieParser = require("cookie-parser");
var bodyParser = require("body-parser");
var swig = require("swig");
var env = require("./env").env;
var log4js = require("log4js");
var utils = require("./utils/utils");
var port = env.port;
var app = express();
var NODE_ENV = process.env.NODE_ENV || "development";
global.token = null;
// view engine setup
// Disables caching in Swig.
swig.setDefaults({ cache: false });
app.engine("html", swig.renderFile);
app.set("views", path.join(__dirname, "dist/views"));
app.set("view engine", "html");
// uncomment after placing your favicon in /public
app.use(favicon(path.join(__dirname, "favicon.ico")));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
let _maxAge = NODE_ENV === "production" ? 30*24*3600*1000 : -1;
app.use(express.static(path.join(__dirname, "dist/static"), {maxAge: _maxAge}));
//
var appLog = log4js.getLogger("app"), //
httpLog = log4js.getLogger("http"); //
global.appLog = appLog; //
utils.mkdirsSync("../logs/node");
utils.mkdirsSync("../logs/c2node");
utils.mkdirsSync("../logs/node2s");
log4js.configure("./log4js.json");
app.use(log4js.connectLogger(httpLog, { level: "auto" }));
utils.autoLogin()
//
require("./routes/index")(app);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error("Not Found");
err.status = 404;
next(err);
});
// error handlers
// 404
app.use(function(req, res, next) {
var err = new Error("Not Found");
err.status = 404;
next(err);
});
// api
app.use("/api", function (err, req, res, next) {
global.appLog.error("Api error :" + err && err.stack || err);
res.json(err);
});
//
app.listen(port, err => {
console.log(err || ":" + port);
console.log(":" + NODE_ENV);
});
browser: Port 3000 is the same