一、初始化项目

  • 新建项目 git init manager

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

  • 新建app.js

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

  • 安装express npm install --save express

  • 运行 app.js

    1. const express = require('express');
    2. const app = express();
    3. app.get('/', (req, res)=>{
    4. res.end('hello, itLike');
    5. });
    6. app.listen(3000, ()=>{
    7. console.log('server is running');
    8. });
    1. node app.js

二、配置 babel

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

https://babel.docschina.org/

1.新建 .babelrc 文件

  • .babelrc 中输入

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

2. 安装babel-register

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

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

三、新建 main.js

1. 中间过渡

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

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

2. app.js

  1. // const express = require('express');
  2. import express from 'express'

3. 运行

  1. node main.js

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

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

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

4. babel 转化

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

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

说明需要安装一下 cli

  1. 全局安装: npm install -g babel-cli

  2. 局部安装: npm install babel-cli --save-dev

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

命令行窗口执行结果:

  1. $ babel ./app.js
  2. 'use strict';
  3. var _express = require('express');
  4. var _express2 = _interopRequireDefault(_express);
  5. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de fault: obj }; }
  6. var app = (0, _express2.default)(); // const express = require('express');
  7. app.get('/', function (req, res) {
  8. res.end('hello, express');
  9. });
  10. app.listen(3000, function () {
  11. console.log('server is running');
  12. });

接下来进入主线步骤:

  1. babel src -d dist

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

结果:src\app.js -> dist\app.js ,目前的目录结构为:

开发和生产分离:

开发环境: npm run dev

生产环境:npm run build npm start

四、配置项目依赖

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

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

2. 在src目录下

新建config.js

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

app.js 中:

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

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

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

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

app.js

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

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

config.js

  1. import {join} from 'path'
  2. export default {
  3. viewPath:join(__dirname,'../views'),
  4. public_path:join(__dirname,'../public'),
  5. node_modules_path:join(__dirname,'../node_modules')
  6. }

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

app.js

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

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

  1. <link rel="stylesheet" href="css/index.css">
  2. <link rel="stylesheet" href="node_modules/bootstrap/dist/css/bootstrap.css">
  3. <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

  1. npm install -g nodemon

启动:

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

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

  1. "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

  1. import nunjucks from 'nunjucks';
  2. nunjucks.configure(config.viewPath, {
  3. autoescape: true,
  4. express: app,
  5. // noCacht 不要缓存,避免开发过程中造成的数据不准确
  6. noCache: true
  7. });
  8. app.get('/', (req, res, next)=>{
  9. // 用 nunjucks ,这里要加上文件后缀了
  10. res.render('index.html');
  11. });
  • 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. c语言printf实现同一位置打印输出

    控制台同一位置打印输出,例如:进度1%->100%在同一位置显示.刚学习c语言的时候一直想做起来,可惜查询好多资料不行.时隔6年多,空闲之余又想起这个问题,便决定一试,虽然c语言已经几乎忘光了, ...

  2. javascript图片预加载

    图片预加载是非常常见的一个功能,PC和移动端都会用到,尤其是在移动端,只要涉及到较多图片的加载都会用到该技术.下面是移动端用到的,引入了zepto. <!DOCTYPE html> < ...

  3. JSON对象的两个方法

    JSON对象有两个方法,stringify()和parse(). 最简单的方法,这两个方法分别用于吧JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript值. ...

  4. ASP.NET 页面之间传递值的几种方式

    1.使用QueryString,  如....?id=1; response. Redirect().... 2.使用Session变量 3.使用Server.Transfer4.Applicatio ...

  5. select下拉框默认不能选择第一个选项的问题

    如题,现在有个js的功能:用户选择下拉框的同时,把选择的下拉框显示出来.同时选择的不能有重复的.刚开始 使用的是 select的onchange事件: $("#liveType") ...

  6. python完全学习笔记

    dir(__builtins__) help(input) 'let\'s go'   #转义字符 \ r'c:\now'       #字符串前加r 自动转义 str= ''' shdiufhi s ...

  7. 深入理解token

      链接:https://my.oschina.net/jamesfancy/blog/1613994 摘要: Token 是在服务端产生的.如果前端使用用户名/密码向服务端请求认证,服务端认证成功, ...

  8. centos aws 修改使用密码ssh登录

    因为使用pem登录有很多局限性,在此修改为用密码但不是root登录 1.关闭selinux(要重启) vi /etc/selinux/config SELINUX=disabled 2.重置root密 ...

  9. jQuery Validate 无法验证 chosen-select元素

    chosen-select元素执行了chosen()方法后,为select元素加上了style="display: none;"进行隐藏,然后重新构造了一个看起来像select的下 ...

  10. 替换NSString类中的stringWithFormat:方法

    替换NSString类中的stringWithFormat:方法 先给出源码: YXUseful.h // // YXUseful.h // NSString // // Copyright (c) ...