一、初始化项目

  • 新建项目 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. Java 带缓冲的字节流和字符流

    输入流就是文件从硬盘到内存的中间媒介,那么输出流就是文件从内存到硬盘的中间媒介.首先来看看FileOutputStream的继承了哪些类, java.lang.Object java.io.Outpu ...

  2. 解决JVM内存溢出问题

    今天遇到了一个问题,当我在增加配置文件(*.xml)内容的时候,重新启动tomcat6时,控制台报错:java.lang.StackOverflowError: 即,栈溢出错误. 内存溢出,即程序运行 ...

  3. 设计模式入门,命令模式,c++代码实现

    // test06.cpp : Defines the entry point for the console application.////设计模式第5章 命令模式#include "s ...

  4. LinearLayout中的android:layout_garvity的center_vertical和center_horizontal

    当LinearLayout的排列方向是 horizontal时,只有垂直方向上的对齐方式才会生效.因为此时水平方向上的长度是不固定的,每添加一个控件,水平方向上的长度都会改变,因而无法指定该方向上的对 ...

  5. .net项目常用的库

    1.单元测试框架 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 2.Entity Framework 框架

  6. MySQL root 密码修改

    小伙伴要在以前的服务器上装个代码版本控制的软件,要用到数据库,可是想来找去root密码还是忘了,其他已经安装的服务都是用的专用账户配置文件里要找不到root用户的密码.用以下方法将密码强制修改掉: 1 ...

  7. centos7编译安装git最新版

    假如系统已经安装了git,先删除. 如果是通过yum安装的,直接在终端使用以下指令删除: yum remove git 如果是通过源码编译安装的,参考以下文章: Linux ./configure & ...

  8. BZOJ2763: [JLOI2011]飞行路线(分层图 最短路)

    题意 题目链接 Sol 分层图+最短路 建\(k+1\)层图,对于边\((u, v, w)\),首先在本层内连边权为\(w\)的无向边,再各向下一层对应的节点连边权为\(0\)的有向边 如果是取最大最 ...

  9. 视差滚动-background-attachement

    之前项目中没有涉及到视觉滚动的网站,但是毕竟是一种常用的网站类别,不得不了解.实现方法很简单,做一下简单的分析... 概述:滚动视差是指多层背景以不同的速度移动,形成立体的运动效果,来带非常出色的视觉 ...

  10. Java 使用Log4J进行日志操作

    使用Log4J进行日志操作   Log4J简介   Log4J是Apache的一个开放源代码项目,它是一个日志操作包,通过使用Log4J,可以指定日志信息输出的目的地,如控制台.文件.CUI组件.NT ...