详解如何从零开始搭建Express+Vue开发环境

准备工作

1. 为前端选择合适的预处理工具和资源管理工具

预处理工具又分为 js 预处理工具和 css 预处理工具。Javascript 一直以来最为人诟病的一点就是缺乏原生的模块机制,所有 js 代码文件在被 html 页面引入后将共用同一个命名空间。所以才出现了各种“标准”尝试解决这个问题,但他们都不是原生的,需要额外的工具对代码进行特殊处理。虽然 ES6 终于引入了模块机制,但以现在的浏览器支持程度,还不足以“毫无顾虑地随拿随用”。所以 js 预处理工具最主要的工作就是帮助解决 js 的模块问题。而 css 预处理工具则很好理解,就是把 sass,less 或者 stylus 代码翻译、合并成 css 代码。

资源管理工具则是帮我们管理前端所需的各种资源文件(比如 css、js、图片、字体等等),便于我们引用。目前常用的解决方法是将他们直接编码进 js 代码中,然后像引用 js 模块一样引用它们。这可比手写各种 url 方便多了。

正如标题所说,我们将采用 Webpack,因为它具备上面所说的所有功能。此外还支持代码热替换,使修改代码后不用刷新页面也能在浏览器中立即看到效果。

2. 为后端选择合适的预处理工具

后端面对的都是 js 代码,不需要前端那样的资源管理工具,另外, Node 强迫你使用至少一种模块管理方案(CommonJS 或 ES6 的 import),也不用考虑代码的依赖问题。

所以后端要简单许多,唯一需要考虑的基本上就剩下如何将 ES6 转译成 ES5 了(如果你打算使用 ES6 的话)。目前常用的做法是使用 Babel,你可以用 Babel 命令行工具独立执行编译过程,也可以配置 Babel register 实现代码运行时动态翻译,这对于开发场景而言无疑是最方便的。所以我们选择后一种方式。

3. 为整个项目选择合适的流程控制工具

流程控制工具是为了帮助我们管理诸如代码检查、编译、压缩、移动、部署这些任务的,原本我们是通过手敲命令(或者高级一点写个脚本)的方式做,有了流程控制工具以后,只需要提供配置文件和少量代码就可以完成。

目前最流行的解决方案是 gulp。不过,由于我们这里要搭建的是开发环境,没有移动代码、压缩、部署等需求,所以不需要功能强大的 gulp。我们只要用 nodemon 这个工具监听代码变动然后适时重启 server就够了。

正式开始搭建

1. 利用 Express 脚手架快速搭建应用

使用 Express 提供的脚手架工具(Express application generator)可以在 1s 之内搭建出最基本的应用。

如果你以前还没试过,首先执行下面的命令安装

npm install express-generator -g

然后执行以下命令生成代码,命令执行过程中需要输入一些参数。

express <myapp>

完成后的文件结构是这样的

.
├── app.js
├── bin
│  └── www
├── package.json
├── public
│  ├── images
│  ├── javascripts
│  └── stylesheets
│    └── style.css
├── routes
│  ├── index.js
│  └── users.js
└── views
  ├── error.jade
  ├── index.jade
  └── layout.jade

但是这个文件结构只是后端代码,要想跟前端代码相结合,需要做一些改动。我们计划最终的文件结构应该是这样的

.
├── src
│  ├── client
│  └── server
└── ...

所以需要将上面自动生成的 Express 代码放到 /src/server/ 路径下。

接下来我们要删除一些用不着的东西以及增加一些缺失的东西。

首先,由于我们打算在前端使用 Vue 框架,并由 Vue-Router 管理大部分路由,后端 Express 仅保留少量的 RESTful API 路由,所以后端不需要复杂的路由设置,那么 routes 文件夹下的内容可以简化成一个 routers.js 文件。

然后,我们需要配置好 Babel register,所以需要在项目跟路径下新增两个文件 .babelrc index.js,内容分别为:

/.babelrc

{
 "presets": ["es2015"],
}

.babelrc 是 Babel 6.0 必须的文件

/.index.js

require('babel-register')
require('./src/server')

上面两句完成 Bebel 注册,它会爬取所有 require import 方式依赖的模块并把它们翻译成 ES5。

自动生成的代码里有个 www 文件,他是 Express 应用的入口文件,我们把它放在 server 路径下并改名为 index.js 以便让上面配置的 Babel register 能正确找到它。

为什么要改名为 index.js ?这是因为 require('./src/server') 在默认情况下会去找 ./src/server/index.js,如果你想用别的名字,那就记得将 Babel register 的配置文件里改为 require(./src/<your entry file>

好了,现在后端的事情先暂时告一段落,接下来看看前端。

2. 利用 Vue 脚手架快速搭建应用

同样地,推荐使用 Vue 自带的template 工具,在 1s 内生成基本代码。

虽然利用这个工具生成的代码的后端就是基于 Express 的,但是后端部分的代码结构太简单,不适合做后续开发。所以建议这里先将 Vue 生成的代码放在另外一个地方,然后按需移动到前面用 Express 生成的代码文件夹里。

首先安装 template 工具

npm install -g vue-cli

然后执行命令生成代码。命令执行过程中需要输入一些参数

vue init webpack <my-project>

生成的代码结构是这样的

.
├── build
│  ├── dev-server.js     # development server script
│  ├── karma.conf.js     # unit testing config
│  ├── webpack.base.conf.js # shared base webpack config
│  ├── webpack.dev.conf.js  # development webpack config
│  ├── webpack.prod.conf.js # production webpack config
│  └── ...
├── src
│  ├── main.js        # app entry file
│  ├── App.vue        # main app component
│  ├── components      # ui components
│  │  └── ...
│  └── assets        # module assets (processed by webpack)
│    └── ...
├── static          # pure static assets (directly copied)
├── dist           # built files ready for deploy
├── test
│  └── unit         # unit tests
│    ├── index.js     # unit test entry file
│    └── ...
├── .babelrc         # babel config
├── .eslintrc.js       # eslint config
├── index.html        # main html file
└── package.json       # build scripts and dependencies

我们发现这里也有一个 .babelrc,内容跟之前自己创建的基本一致,可以忽略它。此外,它还提供了 .eslintrc.js,是为了配合 eslint 检查代码是否符合规范的。这里面的内容很简单,想要偷懒就直接拿过来,觉得定制的规则不太符合自己的习惯的可以另外配置。

然后看到 build 路径下有 3 个 webpack 有关的配置文件,因为我们是要搭建开发环境,所以挑里面的 webpack.base.conf.js 和 webpack.dev.conf.js 就可以,建议把内容合并到一个 webpack.conf.js 文件里,放在项目的根目录下。

之后,基本上就是把 src 目录移动到之前用 Express 创建的 /src/client/,我习惯将所有 js 的入口文件都改为 index.js 所以,这里也可以将 src/client/main.js 改名为 src/client/index.js。

其他的文件先忽略不管。

到这里,前端部分的代码也基本整理完毕了。

3. 配置 Webpack

我们计划让 Webpack 将前端文件打包成一个 build.js 文件,然后放在 /src/server/public/javascripts 中供 jade 模板使用。所以设置好 webpack 的路径部分(其他的保留原来的就好):

{
 ...
 entry: path.join(__dirname, 'src/client/index.js'),
  output: {
   path: path.join(__dirname, 'src/server/public/javascripts/'),
   publicPath: '/javascripts/',
   filename: 'build.js'
  },
 ...
}

至于如何启动 Webpack,你可以选择单独用一个 shell 窗口运行它,也可以以 Express 中间件的形式提供代理。采用后一种方式,webpack 并不会把打包好的代码生成在磁盘上,而是保留在内存里。我们选择后一种方式,因为更方便。

只应该在开发环境中以 Express 中间件的形式部署 Webpack

所以需要修改 /src/server/index.js,关键是增加这几句

import webpack from 'webpack'
import webpackDevMiddleware from 'webpack-dev-middleware'
import webpackHotMiddleware from 'webpack-hot-middleware'
import config from '../../webpack.config'

const compiler = webpack(config)

app.use(webpackDevMiddleware(compiler, {
 publicPath: config.output.publicPath,
 stats: { colors: true },
}))

app.use(webpackHotMiddleware(compiler))

这样每次启动 Express 后,Webpack 中间件会拦截 config.output.publicPath 地址的请求并返回正确的结果,同时,如果被 Webpack 监听的文件发生变动,会立即通知前端产生相应变化。

4. 配置 Nodemon

之前提到过,计划用 Nodemon 启动 server 并监听代码变动。而 Nodemon 默认会监听除了 .git 和 node_modules 路径外的所有 js 代码,因为我们已经有 Webpack 监听前端代码了,所以得做相关配置让 Nodemon 只监听某一块代码。

在项目根路径下新增文件 nodemon.json,内容为

{
 "verbose": true,
 "ignore": ["src/server/public/"],
 "events": {
  "restart": "osascript -e 'display notification \"App restarted due to:\n'$FILENAME'\" with title \"nodemon\"'"
 },
 "watch": ["src/server/"],
 "env": {
  "NODE_ENV": "development"
 },
 "ext": "js jade"
}

其中,将 verbose 设置为 true 将打印更丰富的日志信息,对开发很有帮助。

我们选择让 Nodemon 监听 src/server/ 目录,并忽略 src/server/public 目录,因为那里是前端 webpack 生成打包文件的地方。注意我们是以 Express 中间件的形式使用 Webpack,并不会在磁盘上真的产生文件,所以这个 ignore 规则其实可以省略。

别忘了在文件扩展名中增加 jade 类型,因为 Express 使用的是 jade 模板。

5. 配置 package.json

首先在 script 中增加一个命令,用来启动整个应用

{
 ...
 "scripts": {
  "dev": "nodemon index.js"
 },
 ...
}

这样,只需要运行 npm run dev 这一个命令就可以启动 server 同时进行开发了。

完整的代码已经上传 Github,点击访问

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • node.js express安装及示例网站搭建方法(分享)

    1.首先肯定是要安装Node.JS windows cmd依次输入如下命令: cd C:\Program Files\nodejs\ npm install -g express npm install -g express-generator 2.创建一个示例工程 windows cmd依次输入如下命令: cd C:\Program Files\nodejs\node_global express -e microblog //即ejs,-j(即jade) cd microblog npm i

  • node通过express搭建自己的服务器

    前言 为了模拟项目上线,我们就需要一个服务器去提供API给我们调用数据.这次我采用express框架去写API接口.所有请求都是通过ajax请求去请求服务器来返回数据.第一次用node写后端,基本就是摸着石头的过河,文中有什么不足不处欢迎指出. 安装express框架 传送门: express官方 然后介绍一下需要引入的中间件,node本身提供了一些库.我们可以直接通过require去引用,对于未提供的库,我们也可以通过手动npm去安装 var fs = require('fs'); 操作文件模

  • 详解nodejs中express搭建权限管理系统

    权限管理,是管理系统中的常见组件.通常需要定义资源,把资源调配给用户,通过判断用户是否有权限增删改查来实现. 初衷: 使用express开发过的项目大大小小加在一起也有二十多个了,之前做的各个项目都是独立存在的.最近领导建议说把这些小项目整合到一个大的平台上,给各部门开权限,让他们在一个平台上进行操作.这样做的好处,首先是便于项目管理,其次是节约开发成本.但好像目前使用nodejs做权限管理的资料并不多,这里特意分享出来,仅供参考. 一开始在node_acl.Connect Roles.rbac

  • 搭建基于express框架运行环境的方法步骤

    一.Express简介 Express提供了一个轻量级模块,把Node.js的http模块功能封装在一个简单易用的接口中.Express也扩展了http模块的功能,使你轻松处理服务器的路由.响应.cookie和HTTP请求的状态.使用Express可以充当Web服务器. 二.搭建基于express框架运行环境  开发后端的node服务 1.安装express ① 安装全局变量 npm install express-generator -g (全局变量会在C盘node文件下) ②查看安装成功:e

  • 使用express搭建一个简单的查询服务器的方法

    本文介绍了使用express搭建一个简单的查询服务器的方法,分享给大家,具体如下: 使用到的技术栈有express.mysql. 项目结构: service --node_modules --app.js --query.js app.js支持调用服务,使用body-parser对request进行处理. query.js实现链接数据库以及查询数据库的功能. app.js代码如下: var express = require('express'); var query = require('./

  • 详解如何从零开始搭建Express+Vue开发环境

    准备工作 1. 为前端选择合适的预处理工具和资源管理工具 预处理工具又分为 js 预处理工具和 css 预处理工具.Javascript 一直以来最为人诟病的一点就是缺乏原生的模块机制,所有 js 代码文件在被 html 页面引入后将共用同一个命名空间.所以才出现了各种"标准"尝试解决这个问题,但他们都不是原生的,需要额外的工具对代码进行特殊处理.虽然 ES6 终于引入了模块机制,但以现在的浏览器支持程度,还不足以"毫无顾虑地随拿随用".所以 js 预处理工具最主要

  • 图文详解Android Studio搭建Android集成开发环境的过程

    有很长一段时间没有更新博客了,最近实在是太忙了,没有时间去总结,现在终于可以有时间去总结一些Android上面的东西了,很久以前写过这篇关于使用Android Studio搭建Android集成开发环境,不过一直没有发表出来,写这篇文章的目的是记录一下Android开发环境的搭建过程,这篇文章写得一般般,主要是记录了整个搭建过程,没什么技术含量,觉得有帮助的朋友就看一下! 一.Android Studio简单介绍 2013年GoogleI/O大会首次发布了Android Studio IDE(A

  • 详解如何配置CLion作为Qt5开发环境的方法

    使用Qt进行程序开发时QtCreator总是不二之选.作为老牌IDE在提供了强大的功能同时也对Qt的支持做了许多优化.如果没有特别的原因你应该使用它. 然而一个顺手的工具将会极大得提升生产效率,而如果你之前使用别的工具进行开发,那么就要斟酌一下学习使用QtCreator的成本了. 所以我将介绍配置CLion(另一个强大的c++ IDE)作为Qt5的开发环境,在利用现有工具链的同时避免了安装另一个大型软件. 准备工作 CLion的安装和激活超出了本文的讨论范围,我们假设你已经安装好了CLion.如

  • 详解webpack与SPA实践之开发环境搭建

    目前,公司前端项目开发技术栈基本改造为使用gulp进行自动化构建,webpack进行项目模块化依赖管理,Vue+ Vuex + Vue-Router作为项目组件化开发框架,为了更深入的理解.使用当前技术栈并与读者分享.交流,计划推出一系列相关学习与实践文章.本篇为开篇,主要讲述如何使用webpack搭建开发环境. 项目初始化 以你喜欢的任意方式,创建项目根目录,如: mkdir vue-hello 初始化包模块管理文件 进入项目根目录,初始化项目包模块管理文件package.json: npm

  • 详解从react转职到vue开发的项目准备

    前言 首先,为什么我需要做这个项目准备工作呢?因为常年习惯React开发的我,最近突然接手了一个Vue项目,而之前基本没有过Vue的实践,这么突兀让还在沉溺于React开发的我进行Vue开发,甚是不习惯,那自然我需要想办法让Vue开发尽量与React相似,这样大概让自己在开发过程中更得心应手吧. 组件开发 特性对比 众所周知,Vue和React都有那么一个特性,那就是可以让我们进行组件化开发,这样可以让代码得到更好的重用以及解耦,在架构定位中这个应该叫纵向分层吧.但是,两个框架开发组件的写法都有

  • 详解使用create-react-app快速构建React开发环境

    最近在折腾react开发,总结一个react环境搭建的教程,写得比较细碎,基本上就是自己的搭建步骤了,希望能够帮助到有需要的小伙伴. 常用的脚手架 react-boilerplate react-redux-starter-kit create-react-app(git上关注量最大) 使用 create-react-app 快速构建 React 开发环境 create-react-app 是来自于 Facebook,通过该命令我们无需配置就能快速构建 React 开发环境. create-re

  • 从零开始搭建webpack+react开发环境的详细步骤

    环境主要依赖版本 webpack@4.8.1 webpack-cli@2.1.3 webpack-dev-server@3.1.4 react@16.3.2 babel-core@6.26.3 babel-preset-env@1.6.1 bable-preset-react@6.24.1 webpack安装及配置 1. 起步 新建项目目录,初始化npm,新建开发源目录 mkdir webpack-react && cd webpack-react npm init -y mkdir sr

  • 详解Ubuntu 从零开始搭建Python开发环境

    环境:Ubuntu 16.04 以下命令若无加粗备注说明在本地计算机操作,则都是在服务器端操作 1 修改Ubuntu软件源 Ubuntu安装好之后,安装软件源的服务器地址在境外,速度会比较慢,因此建议修改软件源为国内镜像,这样安装和更新软件会更快些,此处使用的是清华大学开源软件镜像 1.1 备份原有软件源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup 1.2 修改软件源为国内镜像 用编辑器打开/etc/apt/sourc

  • 详解使用Docker搭建Java Web运行环境

    这周末体验了一下挺火的Docker技术,记录学习笔记. >Docker是干什么的 Docker 是一个基于Linux容器(LXC-linux container)的高级容器引擎,基于go语言开发, 源代码托管在 Github 上, 遵从Apache2.0协议开源.Docker的目标是实现轻量级的操作系统虚拟化解决方案. 学习Docker首先要了解几个概念: 镜像-Docker的镜像和常见的系统ISO镜像类似,包含了应用程序的信息: 容器-容器相当于一个可以运行起来的虚拟机,应用程序运行在容器中,

  • 详解如何用docker安装laravel开发环境

    看laravel框架的官方文档安装部分时,发现需要安装特别多软件,估计还有许多复杂的配置,官方推荐使用Laravel Homestead虚拟机进行安装,但是我想现在既然有 docker这么好的东西,为什么不用呢? Docker vs Vagrant 为什么使用Docker而不是Vagrant:从时间上来看,Vagrant提供虚拟机需要数分钟,而Docker只需数秒:此外,从体量上来看,Vagrant提供的是完整的虚拟机,而Docker提供的是轻量级的虚拟容器,这些虚拟容器共享同一个内核并且允许在

随机推荐