一、初始化项目

  • 新建项目 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文件夹下

结果:src\app.js -> dist\app.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.

Node.js笔记07——不使用generator自定义一个项目,深入了解项目结构的更多相关文章

  1. 学习Node.js笔记(一)

    一.什么是Node.js 1.1.Node.js是什么 Node.js是用来编写高性能网络服务器的JavaScript工具包 Node.js 是一个基于Chrome JavaScript 运行时建立的 ...

  2. node.js笔记

    在node环境上面运行js代码,js相当于php,node相当于apache环境 第一步装 node 环境1.从官网下载 dmg 文件安装2.通过命令行安装 需要用到 homebrew(mac上专门用 ...

  3. Node.js笔记3

    ###Node.js核心模块 1. 全局对象 Node.js中能够访问到的都是global的属性 **process它用于描述当前 Node.js 进程状态的对象,提供了一个与操作系统的简单接口.** ...

  4. Node.js npm基础安装配置&创建第一个VUE项目

    使用之前,我们先来明白这几个东西是用来干什么的. node.js: 一种javascript的运行环境,能够使得javascript脱离浏览器运行.Node.js的出现,使得前后端使用同一种语言,统一 ...

  5. 使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(三)

    这几篇都是我原来首发在 segmentfault 上的地址:https://segmentfault.com/a/1190000005040834 突然想起来我这个博客冷落了好多年了,也该更新一下,呵 ...

  6. Node.js笔记1

    Node.js入门笔记 1. node -help 可以显示帮助信息2. node REPL 模式(Read-eval-print loop) 输入—求值—输出循环 直接在cmd输入node 可以进入 ...

  7. node.js中通过stream模块实现自定义流

    有些时候我们需要自定义一些流,来操作特殊对象,node.js中为我们提供了一些基本流类. 我们新创建的流类需要继承四个基本流类之一(stream.Writeable,stream.Readable,s ...

  8. node.js 笔记

    教程总结笔记: 学习网站:http://www.runoob.com/nodejs/nodejs-install-setup.html Node.js 中文网及安装文件下载: http://nodej ...

  9. Node.js 笔记02

    一.关于命令 常用命令: dir 列出当前目录下面所有的文件 cd 目录名 进入到指定的目录,. 当前目录, .. 进入上级目录,cd . 当前目录, cd .. 上级目录 md 目录名 创建文件夹 ...

随机推荐

  1. javaweb之jsp指令

    1.JSP指令简介 JSP指令是为JSP引擎设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令:page指令,Include指 ...

  2. Java List集合和哈希表

    List集合和Set集合,先来看List集合. List集合存储元素的特点: 1.有序(List集合中的元素有下标):存进去是什么样,取出来还是什么样 2.可重复 可以结合以下的简单代码来看一看. i ...

  3. Object.preventExtensions()使用技巧

    Object.preventExtensions() 方法让一个对象变的不可扩展,也就是永远不能再添加新的属性. // Object.preventExtensions将原对象变的不可扩展,并且返回原 ...

  4. js-滚动到指定位置导航栏固定顶部

    最近整理一下之前做的一个项目,把滚动条动态固定顶部的代码整理出来和大家分享,上代码 <!DOCTYPE html> <html> <head> <meta c ...

  5. 【Supervised Learning】 集成学习Ensemble Learning & Boosting 算法(python实现)

    零. Introduction 1.learn over a subset of data choose the subset uniformally randomly (均匀随机地选择子集) app ...

  6. 抖音C#版,自己抓第三方抖音网站

    感谢http://dy.lujianqiang.com技术支持 文章更新:http://dy.lujianqiang.com这个服务器已经关了,现在没用了 版权归抖音公司所有,该博客只是为交流学习所使 ...

  7. css 三角形的制作

    参考网页: http://www.jb51.net/article/42513.htm 1 .设置宽高为0 2 .设置4条边框 3 .设置边框颜色border-color如下: border-colo ...

  8. IIS6.0配置正常,但是显示“网页无法访问”,Httperr.log中显示全是“Connections_refused”,问题总结

    转自:http://blog.csdn.net/foxeatapple/article/details/21983869 最近部门的Web服务器突然无法访问! 加班解决! 问题症状: 1.“Inter ...

  9. LeetCode-Maximal Rectangle [学以致用] ZZ

    http://www.cnblogs.com/lichen782/p/leetcode_maximal_rectangle.html 题目: Given a 2D binary matrix fill ...

  10. Redis的系统级命令

    文章建立一个统一的认识就是Redis的版本是3.2.8 1:BGREWRITEAOF(bgrewriteaof) 执行一个 AOF文件 重写操作.重写会创建一个当前 AOF 文件的体积优化版本. 即使 ...