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 ,这样就可以保证所有的语法都能正常运行了
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
font-awesome:一套绝佳的图标字体库和CSS框架 http://fontawesome.dashgame.com/
nprogress: 轻量级的进度条组件,另外还有一款叫 nanobar
NProgress.js:http://ricostacruz.com/nprogress/
nanobar.js:http://nanobar.micronube.com/
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 专用的功能丰富、强大的模板引擎。
删除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自定义一个项目,深入了解项目结构的更多相关文章
- 学习Node.js笔记(一)
一.什么是Node.js 1.1.Node.js是什么 Node.js是用来编写高性能网络服务器的JavaScript工具包 Node.js 是一个基于Chrome JavaScript 运行时建立的 ...
- node.js笔记
在node环境上面运行js代码,js相当于php,node相当于apache环境 第一步装 node 环境1.从官网下载 dmg 文件安装2.通过命令行安装 需要用到 homebrew(mac上专门用 ...
- Node.js笔记3
###Node.js核心模块 1. 全局对象 Node.js中能够访问到的都是global的属性 **process它用于描述当前 Node.js 进程状态的对象,提供了一个与操作系统的简单接口.** ...
- Node.js npm基础安装配置&创建第一个VUE项目
使用之前,我们先来明白这几个东西是用来干什么的. node.js: 一种javascript的运行环境,能够使得javascript脱离浏览器运行.Node.js的出现,使得前后端使用同一种语言,统一 ...
- 使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(三)
这几篇都是我原来首发在 segmentfault 上的地址:https://segmentfault.com/a/1190000005040834 突然想起来我这个博客冷落了好多年了,也该更新一下,呵 ...
- Node.js笔记1
Node.js入门笔记 1. node -help 可以显示帮助信息2. node REPL 模式(Read-eval-print loop) 输入—求值—输出循环 直接在cmd输入node 可以进入 ...
- node.js中通过stream模块实现自定义流
有些时候我们需要自定义一些流,来操作特殊对象,node.js中为我们提供了一些基本流类. 我们新创建的流类需要继承四个基本流类之一(stream.Writeable,stream.Readable,s ...
- node.js 笔记
教程总结笔记: 学习网站:http://www.runoob.com/nodejs/nodejs-install-setup.html Node.js 中文网及安装文件下载: http://nodej ...
- Node.js 笔记02
一.关于命令 常用命令: dir 列出当前目录下面所有的文件 cd 目录名 进入到指定的目录,. 当前目录, .. 进入上级目录,cd . 当前目录, cd .. 上级目录 md 目录名 创建文件夹 ...
随机推荐
- Java 带缓冲的字节流和字符流
输入流就是文件从硬盘到内存的中间媒介,那么输出流就是文件从内存到硬盘的中间媒介.首先来看看FileOutputStream的继承了哪些类, java.lang.Object java.io.Outpu ...
- 解决JVM内存溢出问题
今天遇到了一个问题,当我在增加配置文件(*.xml)内容的时候,重新启动tomcat6时,控制台报错:java.lang.StackOverflowError: 即,栈溢出错误. 内存溢出,即程序运行 ...
- 设计模式入门,命令模式,c++代码实现
// test06.cpp : Defines the entry point for the console application.////设计模式第5章 命令模式#include "s ...
- LinearLayout中的android:layout_garvity的center_vertical和center_horizontal
当LinearLayout的排列方向是 horizontal时,只有垂直方向上的对齐方式才会生效.因为此时水平方向上的长度是不固定的,每添加一个控件,水平方向上的长度都会改变,因而无法指定该方向上的对 ...
- .net项目常用的库
1.单元测试框架 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 2.Entity Framework 框架
- MySQL root 密码修改
小伙伴要在以前的服务器上装个代码版本控制的软件,要用到数据库,可是想来找去root密码还是忘了,其他已经安装的服务都是用的专用账户配置文件里要找不到root用户的密码.用以下方法将密码强制修改掉: 1 ...
- centos7编译安装git最新版
假如系统已经安装了git,先删除. 如果是通过yum安装的,直接在终端使用以下指令删除: yum remove git 如果是通过源码编译安装的,参考以下文章: Linux ./configure & ...
- BZOJ2763: [JLOI2011]飞行路线(分层图 最短路)
题意 题目链接 Sol 分层图+最短路 建\(k+1\)层图,对于边\((u, v, w)\),首先在本层内连边权为\(w\)的无向边,再各向下一层对应的节点连边权为\(0\)的有向边 如果是取最大最 ...
- 视差滚动-background-attachement
之前项目中没有涉及到视觉滚动的网站,但是毕竟是一种常用的网站类别,不得不了解.实现方法很简单,做一下简单的分析... 概述:滚动视差是指多层背景以不同的速度移动,形成立体的运动效果,来带非常出色的视觉 ...
- Java 使用Log4J进行日志操作
使用Log4J进行日志操作 Log4J简介 Log4J是Apache的一个开放源代码项目,它是一个日志操作包,通过使用Log4J,可以指定日志信息输出的目的地,如控制台.文件.CUI组件.NT ...