zoukankan      html  css  js  c++  java
  • Node.js笔记07——不使用generator自定义一个项目,深入了解项目结构

    一、初始化项目

    • 新建项目 git init manager

    • 新建view文件夹,建几个静态文件夹

    • 新建app.js

    • 快速初始化项目依赖 npm init -y

    • 安装express npm install --save express

    • 运行 app.js

      const express = require('express');
      const  app = express();
      
      app.get('/', (req, res)=>{
          res.end('hello, itLike');
      });
      
      app.listen(3000, ()=>{
          console.log('server is running');
      });
      
      node app.js
      

    二、配置 babel

    作用: 开发阶段写的时候用ES6,由于 node可能对一些ES6的语法支持不是太完全,所以在babel的帮助下,运行的时候系统会将ES6 的代码 转换为 ES5 ,这样就可以保证所有的语法都能正常运行了

    https://babel.docschina.org/

    1.新建 .babelrc 文件

    • .babelrc 中输入

      {
        "presets": [
          "env"
        ]
      }
      
    • 执行:npm install babel-preset-env --save-dev
      /*
      为什么要用--save-dev:生产环境中不需要,上线部署的时候执行 npm install --production
      */
      

    2. 安装babel-register

    babel-register可以理解成一个小插件,将es6的东西转成es5.

    执行 npm i babel-register --save-dev

    三、新建 main.js

    1. 中间过渡

    即通过运行 main.js ,间接的运行 app.js

    require('babel-register');
    require('./app');
    

    2. app.js

    // const express = require('express');	
    import express from 'express'
    

    3. 运行

    node main.js
    

    如果main.js 里面,没有 require('babel-register') 这句,运行就会报错 SyntaxError: Unexpected identifier........

    所以,可以看出babel-register的作用

    如此一来,暴露在外面的就是我们的main.js文件了,main.js 文件就是项目的入口文件

    4. babel 转化

    用 babel 命令把 app.js es6 的内容转换为 es5

    $ babel ./app.js
    bash: babel: command not found
    

    说明需要安装一下 cli

    全局安装: npm install -g babel-cli
    或
    局部安装: npm install babel-cli --save-dev
    

    使用babel命令,如果在命令行工具中无效,就使用全局安装,

    命令行窗口执行结果:

    $ babel ./app.js
    'use strict';
    
    var _express = require('express');
    
    var _express2 = _interopRequireDefault(_express);
    
    function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de                                                      fault: obj }; }
    
    var app = (0, _express2.default)(); // const express = require('express');
    
    
    app.get('/', function (req, res) {
        res.end('hello, express');
    });
    
    app.listen(3000, function () {
        console.log('server is running');
    });
    
    
    

    接下来进入主线步骤:

    babel src -d dist
    

    命令的作用是将 src 下的所有文件 用babel 转成 es5的文件,并放到 dist文件夹下

    结果:srcapp.js -> distapp.js ,目前的目录结构为:

    开发和生产分离:

    开发环境: npm run dev

    生产环境:npm run build npm start

    四、配置项目依赖

    1. 引入项目中需要用的第三方类库

    npm i --save bootstrap@3.3.7 font-awesome nprogress jquery echarts
    

    2. 在src目录下

    新建config.js

    import {join} from 'path'
    export default {
        viewPath: join(__dirname, '../views')
    }
    

    app.js 中:

    import config from './config'
    import express from 'express'
    
    const app = express();
    
    // 1. 设置模板引擎view engine setup
    app.set('views', config.viewPath);
    app.set('view engine', 'ejs');
    
    // 2. 配置静态的资源
    app.use(express.static(config.public_path));
    
    
    app.get('/', (req, res,next)=>{
        res.render('index');
    });
    
    app.listen(3000, ()=>{
        console.log('server is running');
    });
    

    安装ejs模板: npm install ejs --save

    启动: npm run dev 访问 http://localhost:3000/ ,就可以访问到我们的页面了

    3. 引入node_modules中的资源文件​

    app.js

    ......
    // 2. 配置静态的资源
    app.use(express.static(config.public_path));
    app.use('/node_modules', express.static(config.node_modules_path));
    ......
    

    4.新建public文件夹, 引入静态资源

    config.js

    import {join} from 'path'
    export default {
        viewPath:join(__dirname,'../views'),
        public_path:join(__dirname,'../public'),
        node_modules_path:join(__dirname,'../node_modules')
    }						
    

    import {join} from 'path' 意思就是取 path 里的方法,也可以 import path from 'path' ,下面拼接的时候用 path.join() 即可。

    app.js

    app.use('/public', express.static(config.public_path));
    

    在index.ejs中, 引入 modules里的文件如下,其他静态文件直接引入即可

    <link rel="stylesheet" href="css/index.css">
    <link rel="stylesheet" href="node_modules/bootstrap/dist/css/bootstrap.css">
    <link rel="stylesheet" href="node_modules/font-awesome/css/font-awesome.css">
    

    5. 配置nodemon

    nodemon用来监视node.js应用程序中的任何更改并自动重启服务 ,这样开发中就不用频繁手动重启服务了。

    nodemon 可参考博客:http://www.cnblogs.com/JuFoFu/p/5140302.html?utm_source=tuicool&utm_medium=referral

    npm install -g nodemon
    

    启动:

    nodemon [your node app](相当于 node [your node app])
    

    在这里我们根据实际情况,更改 package.json 中的内容

    "dev": "node main.js"  改为:  "dev": "nodemon main.js"
    

    五、 配置新的模板引擎 Nunjucks

    以上使用的模板引擎是 ejs ,下面用 Nunjucks,JavaScript 专用的功能丰富、强大的模板引擎。

    https://nunjucks.bootcss.com/

    • 删除ejs配置nunjucks, npm uninstall --save ejs

    • 安装nunjucks npm install nunjucks --save

    然后:app.js

    import nunjucks from 'nunjucks';
    nunjucks.configure(config.viewPath, {
        autoescape: true,
        express: app,
        // noCacht 不要缓存,避免开发过程中造成的数据不准确
        noCache: true
    });
    
    
    app.get('/', (req, res, next)=>{
        // 用 nunjucks ,这里要加上文件后缀了
        res.render('index.html');
    });
    
    • nunjucks模板引擎没有对模板文件名的后缀做特定限制,如果文件名是index.html, 则渲染是就需要传递 index.html
    • 到处 可运行,无论是 node 还是任何浏览器都支持,并且还可以预编译模板。

    运行 npm run dev ,访问 ok.

  • 相关阅读:
    并发编程(2)-进程、并发和并行讲解
    并发编程(5)-管道、数据共享、进程池
    并发编程(4)-进程中的锁、信号量、 事件和队列
    人工智能及数学运算的基础方法
    并发编程(3)-进程模块
    判断一个数是否是水仙花数
    js中隐式类型转换测试
    webpack使用webpack-dev-middleware进行热重载
    网页打包安卓APP流程
    「postgres」查看数据库连接数
  • 原文地址:https://www.cnblogs.com/friday69/p/10197699.html
Copyright © 2011-2022 走看看