一、初始化项目

  • 新建项目 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. node.js之内存机制特性

    Node.JS的V8引擎具有垃圾回收机制与内存限制的特性,V8的内存限制:64位系统约为1.4GB.32位系统约为0.7GB:V8采用基于分代式垃圾回收机制,堆内存结构分为新生代和老生代,新生代达到一 ...

  2. SZU2

    CF:Problem 425A 区间暴力,枚举区间.交换选定区间最小值和剩余区间最大值k次. 其实等同于将剩余区间最大k个加到选定区间里,然后排序 #include <iostream> ...

  3. poj 1155 树形背包

    http://blog.csdn.net/libin56842/article/details/9908199 树形背包: 首先是建树,每个结构体为一个节点,包括下一个点序号,值,和next. tre ...

  4. webpack-loader原理

    loader loader 是导出为一个函数的 node 模块.该函数在 loader 转换资源的时候调用.给定的函数将调用 loader API,并通过 this 上下文访问. loader配置 { ...

  5. JavaEE之动态页面技术(JSP/EL/JSTL)

    动态页面技术(JSP/EL/JSTL) JSP技术 jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%= ...

  6. 谈谈我从工作中理解的CDN

    一.CDN定义 CDN的全称是Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳定.通过 ...

  7. centos yum安装常用命令

    安装killall命令 yum install -y psmisc 安装sz(下载)和rz(上传)命令 yum install -y lrzsz 安装 ifconfig 命令 yum install ...

  8. Swiper正方体,左右翻转轮播图

    今天的轮播图,和往常的有一点点不同哦!可以说是有一点点的3D效果!因为他在运动的时候,是以正方体的样子左右滚动的; 先引插件: <link rel="stylesheet" ...

  9. 简单的自动升级提示AutoUpdater

    看过网上“圣殿骑士”和其他人的升级做法,感觉不太适合几十M的小型软件. 之前用的一直都是clickonce,但是3年下来感觉弊端太多,比如安装不能选择文件夹.打包不全.版本等问题,于是决定另辟捷径. ...

  10. 从尾到头打印链表(C++和Python 实现)

    (说明:本博客中的题目.题目详细说明及参考代码均摘自 “何海涛<剑指Offer:名企面试官精讲典型编程题>2012年”) 题目 输入一个链表的头结点, 从尾到头反过来打印出每个结点的值. ...