• mystar01 nodejs MVC gulp 项目搭建


    文本内容

    使用generator-express创建nodejs MVC DEMO

    使用gulp实时编译项目

    npm安装

    从官网下载最新版安装

    https://www.npmjs.com/

    generator-express

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

    项目初始化

    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

    npm install @babel/core @babel/plugin-transform-runtime @babel/preset-env @babel/register @babel/runtime babel-core babel-polyfill -D

    npm install --save-dev  gulp-babel@^8.0.0

    npm install gulp-uglify-es vinyl-named -D

    npm install "babel-core"@"^7.0.0-bridge.0" -D

    npm install --save-dev node-sass@^6.0.1

    npm install --save-dev sass@^1.35.2

    .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"
      }
    }

    sudo npm install -g gulp

    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预处理语言

  • 相关阅读:
    webpack学习(一)—— 入门
    AMD 规范
    CommonJS 规范
    webpack 故障处理
    webpack 开发环境
    webpack 插件
    webpack 配置文件
    webpack 使用
    webpack Loader
    webpack常用的插件安装命令
  • 原文地址:https://www.cnblogs.com/perfei/p/14932228.html
Copyright © 2020-2023  润新知