文本内容

使用generator-express创建nodejs MVC DEMO

使用gulp实时编译项目

npm安装二进制包,无须再编译
wget https://nodejs.org/dist/v14.17.5/node-v14.17.5-linux-x64.tar.xz

解压后加入环境变量
export PATH=/opt/app/node-v14.17.5-linux-x64/bin:$PATH

npm install -g yarn

generator-express

An Expressjs generator for Yeoman, based on the express command line tool.

https://www.npmjs.com/

https://www.npmjs.com/package/generator-express

项目初始化

mkdir blog1

cd blog1

npm install -g yo

npm install -g generator-express

npm install -g npm-check

yo express

? Would you like to create a new directory for your project? No
? Select a version to install: MVC
? Select a view engine to use: Pug
? Select a css preprocessor to use: Sass
? Select a database to use: MongoDB
? Select a build tool to use: Gulp

npm-check -u

检查更新并全部选中,使用最新包

 

gulp使用说明

https://gulpjs.com/docs/en/getting-started/quick-start/

babel 能将JS翻译为浏览器识别的JS

https://www.babeljs.cn/

https://www.babeljs.cn/setup#installation

设置中选gulp

.babelrc,与package.json同目录

 {
"presets": [ "@babel/preset-env" ],
"plugins": [ "@babel/plugin-transform-runtime" ]
}

gulpfile.js变成gulpfile.babel.js

const gulp = require('gulp');
var babel = require("gulp-babel");
const nodemon = require('gulp-nodemon');
const plumber = require('gulp-plumber');
const named = require('vinyl-named'); // 名字缩写
const uglify = require('gulp-uglify-es').default; //支持ES6的一些写法
const livereload = require('gulp-livereload');
const sass = require('gulp-sass');
const glob = require('glob');
const path = require('path') require('babel-polyfill'); let cssTasks = new Map();
//读取src/css/admin/*.scss = > public/css/admin
let cssFiles = glob.sync(__dirname + '/src/css/+(include|admin|blog)/*.scss');
// console.log(cssFiles); cssFiles.forEach(cssFile => {
//给每个文件添加一个task,当某一个文件修改时,不至于编译所有文件
let dest = path.dirname(cssFile.replace('src', 'public'));
cssTasks.set(cssFile, function(cb){ gulp.src(cssFile)
.pipe(plumber())
.pipe(sass({outputStyle: 'compressed'}))
.pipe(gulp.dest(dest))
.pipe(livereload());
cb();
});
}); function css(cb){
gulp.series(...cssTasks.values());
cb();
} //-------------------js-------------------------------------------------
let jsTasks = new Map();
let jsFiles = glob.sync(__dirname + '/src/js/+(admin|blog)/*.js');
jsFiles.forEach(jsFile => {
//给每个文件添加一个task,当某一个文件修改时,不至于编译所有文件
let dest = path.dirname(jsFile.replace('src', 'public'));
jsTasks.set(jsFile, function(cb){
gulp.src(jsFile)
.pipe(plumber())
.pipe(named()) //名字缩写
.pipe(babel()) //转换JS
.pipe(uglify()) //加强ES6语法支持
.pipe(gulp.dest(dest))
.pipe(livereload());
cb();
});
});
function js(cb){
gulp.series(...jsTasks.values());
cb();
} //-------------------img-------------------------------------------------
function img(cb){
gulp.src('./src/img/*.*')
.pipe(gulp.dest('./public/img/'))
.pipe(livereload());
cb();
} function watch(cb){
// gulp.watch('./src/css/*.scss', gulp.parallel(css));
for(let [key, value] of cssTasks.entries()){
// console.log(value);
gulp.watch(key, gulp.parallel(value));
}
// gulp.watch('./src/js/**/*.js', gulp.parallel(js));
for(let [key, value] of jsTasks.entries()){
// console.log(value);
gulp.watch(key, gulp.parallel(value));
}
gulp.watch('./src/img/*.*', gulp.parallel(img));
cb();
} function develop(cb){
livereload.listen();
nodemon({
script: 'app.js',
ext: 'js coffee pug',
stdout: false
}).on('readable', function () {
this.stdout.on('data', (chunk) => {
if (/^Express server listening on port/.test(chunk)) {
livereload.changed(__dirname);
}
});
this.stdout.pipe(process.stdout);
this.stderr.pipe(process.stderr);
});
cb();
} exports.default = gulp.parallel(img, css, js, watch, develop);

package.json


{
"name": "mystar",
"version": "0.0.1",
"private": true,
"main": "app.js",
"scripts": {
"start": "node app.js",
"test": "NODE_ENV=test mocha --recursive test",
"test:coverage": "nyc npm test",
"test:unit": "mocha --recursive test/middleware test/models test/routes",
"test:integration": "mocha --recursive test/integration"
},
"dependencies": {
"@fortawesome/fontawesome-free": "^5.15.3",
"body-parser": "^1.13.3",
"bootstrap": "^5.0.2",
"compression": "^1.5.2",
"cookie-parser": "^1.3.3",
"del": "^6.0.0",
"express": "^4.13.3",
"glob": "^7.1.7",
"jquery": "^3.6.0",
"method-override": "^3.0.0",
"mongoose": "^5.12.15",
"morgan": "^1.6.1",
"path": "^0.12.7",
"pug": "^3.0.2",
"serve-favicon": "^2.3.0"
},
"devDependencies": {
"@babel/core": "^7.14.6",
"@babel/plugin-transform-runtime": "^7.14.5",
"@babel/preset-env": "^7.14.7",
"@babel/register": "^7.14.5",
"@babel/runtime": "^7.14.6",
"babel-core": "^7.0.0-bridge.0",
"babel-polyfill": "^6.26.0",
"chai": "^4.3.4",
"debug": "^4.3.1",
"gulp": "^4.0.2",
"gulp-babel": "^8.0.0",
"gulp-clean-css": "^4.3.0",
"gulp-concat": "^2.6.1",
"gulp-livereload": "^4.0.2",
"gulp-nodemon": "^2.0.2",
"gulp-plumber": "^1.0.0",
"gulp-rename": "^2.0.0",
"gulp-sass": "^5.0.0",
"gulp-uglify": "^3.0.2",
"gulp-uglify-es": "^2.0.0",
"mocha": "^9.0.1",
"node-sass": "^6.0.1",
"nyc": "^15.1.0",
"regenerator-runtime": "^0.13.7",
"sass": "^1.35.2",
"supertest": "^6.1.3",
"vinyl-named": "^1.1.0"
}
}
 

rm -rf node_modules/
yarn install

然后执行以下命令启动项目

gulp

如果启动失败,可以删除安装包,创建几个关键文件,然后重新安装

http://localhost:3000/

错误示例

Error in plugin "gulp-sass"
Message: gulp-sass 5 does not have a default Sass compiler; please set one yourself.
Both the `sass` and `node-sass` packages are permitted.
For example, in your gulpfile: var sass = require('gulp-sass')(require('sass')); [20:27:24] The following tasks did not complete: <parallel>, <anonymous>
[20:27:24] Did you forget to signal async completion?

教你如何在原生小程序中使用scss预处理语言

01 nodejs MVC gulp 项目搭建的更多相关文章

  1. Spring MVC + Mybatis项目搭建

    1.参考<Java Spring MVC项目搭建(一)——Spring MVC框架集成>配置spring mvc需要的jar包及eclipse配置(主要是针对servlet-api.jar ...

  2. mystar01 nodejs MVC 公共CSS,JS设置

    mystar01 nodejs MVC gulp 项目搭建 config/express.js中定义别名 //将下载的第三方库添加到静态资源路径当中,方便访问 app.use('/jquery', e ...

  3. vue项目搭建介绍01

    目录 vue项目搭建介绍01 vue 项目框架环境搭建: 创建项目: vue 项目创建流程: vue项目搭建介绍01 vue 项目框架环境搭建: vue 项目框架: vue django(类似)(vu ...

  4. 使用gulp+browser-sync搭建前端项目自动化以及自动刷新

    前段时间使用了gulp+browser-sync才发现这个东西真的很好用. 准备工作:(1).安装nodejs.gulp是基于nodejs使用的,所以先安装nodejs,https://nodejs. ...

  5. freemarker + spring mvc + spring + mybatis + mysql + maven项目搭建

    今天说说搭建项目,使用freemarker + spring mvc + spring + mybatis + mysql + maven搭建web项目. 先假设您已经配置好eclipse的maven ...

  6. Spring MVC 项目搭建 -6- spring security 使用自定义Filter实现验证扩展资源验证,使用数据库进行配置

    Spring MVC 项目搭建 -6- spring security使用自定义Filter实现验证扩展url验证,使用数据库进行配置 实现的主要流程 1.创建一个Filter 继承 Abstract ...

  7. Spring MVC 项目搭建 -5- spring security 使用数据库进行验证

    Spring MVC 项目搭建 -5- spring security 使用数据库进行验证 1.创建数据表格(这里使用的是mysql) CREATE TABLE security_role ( id ...

  8. Spring MVC 项目搭建 -4- spring security-添加自定义登录页面

    Spring MVC 项目搭建 -4- spring security-添加自定义登录页面 修改配置文件 <!--spring-sample-security.xml--> <!-- ...

  9. Spring MVC 项目搭建 -3- 快速 添加 spring security

    Spring MVC 项目搭建 -3- 快速 添加 spring security 1.添加 spring-sample-security.xml <!-- 简单的安全检验实现 --> & ...

随机推荐

  1. Dataworks批量刷数优化方案探讨

    Dataworks批量刷数优化方案探讨 在数据仓库的日常使用中,经常会有批量补数据,或者逻辑调整后批量重跑数据的场景. 批量刷数的实现方式,因调度工具差异而各有不同. Dataworks调度批量刷数局 ...

  2. 一维前缀和 连续数组和为k

    给定一个整数数组和一个整数 k ,请找到该数组中和为 k 的连续子数组的个数. 滑动窗口没办法解决有负数的情况 方法一: 预处理 前缀和 sum_ij = preSum[j] - preSum[i-1 ...

  3. 大数据SQL中的Join谓词下推,真的那么难懂?

    听到谓词下推这个词,是不是觉得很高大上,找点资料看了半天才能搞懂概念和思想,借这个机会好好学习一下吧. 引用范欣欣大佬的博客中写道,以前经常满大街听到谓词下推,然而对谓词下推却总感觉懵懵懂懂,并不明白 ...

  4. C++ STL的一些应用

    STL一些应用 记录一些STL算法在开发中用得比较舒服的情况(不断添加...) lower_bound(begin,end,val)算法 算法说明 查找>=val的第一个元素,如果没有,返回en ...

  5. feign微服务调用携带浏览器信息(header、cookie)

    import feign.RequestInterceptor; import feign.RequestTemplate; import org.apache.commons.collections ...

  6. 『学了就忘』Linux基础命令 — 39、挂载U盘和挂载NTFS分区

    目录 1.在Linux系统中挂载U盘 (1)插入U盘 (2)查询U盘设备文件名 (3)挂载U盘 (4)U盘中的中文乱码 (5)U盘卸载 2.在Linux系统中挂载NTFS分区 (1)Linux的驱动加 ...

  7. 大一C语言学习笔记(2)---快捷键篇

    大家好,博主呢,是一位刚刚步入大一的软件工程专业的大学生,之所以写博客,是想要与同样刚刚接触程序员一行的朋友们一起讨论,进步,在这里记录我的一些学习笔记及心得,希望通过这些点点滴滴的努力,可以让我们离 ...

  8. ES6基础知识(async 函数)

    1.async 函数是什么?一句话,它就是 Generator 函数的语法糖. const fs = require('fs'); const readFile = function (fileNam ...

  9. oracle中是否有except函数: select * from a except select * from b

    除外: oracle没有except这个关键字,这个关键字属于sqlserver ,在oracle里,他叫minus,与except是一个意思. select a.code OrgId, b.code ...

  10. 菜鸡的Java笔记 简单JAVA 类的开发原则以及具体实现

    /*  现在要求定义一个雇员信息类 在这个类之中包含有雇员编号 姓名 职位 基本工资 佣金等信息    对于此时给定要求实际上就是描述一类事物,而这样的程序类在在java之中可以将其称为简单java类 ...