Re:从零开始的Vue项目搭建

Re:从零开始的Vue项目搭建

  • 初始的终结与结束的开始
  • Nodejs项目的简单测试
  • 从零开始
    • webpack开发模式
    • webpack编译打包
  • 后记

初始的终结与结束的开始

最开始接触vue项目搭建是从vue-cli开始,模板式操作,一键搞定,几乎可以无缝进入代码开发阶段,这对新人来说很友好,马上就能够一边看教程,一边测试代码,我当初就是这么学vue的(顺便提一下,我在学习vue之前没接触过任何前端框架,连Nodejs都没接触过,以前做前端的时候只会html+css/sass+js这种形式),但是这对新人也不好,因为模板搭建的东西往往很全面,全面就意味着东西很多,至于项目是怎么运行的,那些模板生成的文件都代表什么意思,在项目中起到什么作用,等等等,对新人来说一时半会儿很难搞清除,尤其是像我这总没接触过nodejs的人来说更甚。

所以在学习了一段时间的vue之后,我决定回到最初,开始学习如何从零搭建vue项目。

在搭建vue项目之前先了解一下Nodejs项目,因为vue项目其实就是Nodejs项目,了解Nodejs项目不仅有利于学习了解vue项目,并且更具有扩展性和通用性。

一个Nodejs项目的创建过程,大致分为 1.创建项目目录,2.初始化项目,3.安装依赖模块,4.进入开发过程

mkdir myproject   # 创建项目目录
cd myproject      # 进入项目目录
npm init          # 初始化项目

接下来会引导你创建一个名为package.json的文件,它是Nodejs项目所必须的,里面记录了项目名称,版本,描述,关键词,作者,脚本命令,生产环境,开发环境等等。关于package.json的完整字段信息可以百度。

输入代码开始安装模块
npm install <package>仅安装模块,
npm install <package> --save安装模块并在生产环境dependencies中记录包名和版本,
npm install <package> --save-dev安装模块并在开发环境devDependencies中记录包名和版本。

这就好比,刚刚初始化Nodejs项目相当于干细胞,根据安装的模块和依赖不同,就会成为不同的项目。好,接下来,我们就在这个基础Nodejs项目上去搭建vue项目

Nodejs项目的简单测试

这里先测试一下如何在Node中渲染html,熟悉Node的同学可以跳过。在项目目录下添加一个入口文件index.html,我们的vue项目需要在html中进行渲染,然后在index.html中随便写的东西,方便我们看到效果,比如<h1>hello world</h1>?

|-- build
|   |-- run.js
|-- node_modlues
|   |-- ...
|-- index.html
|-- package.json

package.jsonscripts字段中添加npm的命令缩写,node ./build/run.js,这是一条node语句,表示使用 node 运行run.js

"scripts": {"start": "node ./build/run.js"},

./build/run.js内容

var express = require('express')
var path = require('path')
var app = express()app.get('/', function (request, response) {var root = path.resolve('.')response.sendFile( root + '/index.html')
})var server = app.listen(8080, '127.0.0.1', function () {var host = server.address().addressvar port = server.address().portconsole.log("Server running at http://%s:%s", host, port)
})

我们用到了express模块,这是一个很基础,但也很重要的Nodejs框架,先安装npm insall express --save-dev

接下来我们使用命令npm run start运行程序,控制台会显示如下信息

D:\wwwroot\myproject>npm run start> myproject@1.0.0 start D:\wwwroot\myproject
> node ./build/run.jsServer running at http://127.0.0.1:8080

是不是感觉和vue-cli搭建的模板工程很像,然后我们去浏览器输入http://127.0.0.1:8080就能看到我们在index.html中写的内容了,更改内容,然后刷新页面再看看效果。

从零开始

(从零开始的意义:大家可以放弃之前 Nodejs项目的测试 所做的更改,重新初始化一个项目,不用安装任何模块,一切从这里开始)

Nodejs项目的运行大致如上,但和我们的目标还相去甚远,要搭建vue项目,首先得配置开发环境(即安装模块)。

首先是安装 vuewebpack 模块,vue是我们项目的核心,这个没啥说的。webpackJavaScript的打包模块,它将浏览器不能直接运行的语言打包处理成适合的格式以供浏览器使用。因为vue是发布所需要的,所以使用以下命令

npm install vue --save
npm install webpack --save-dev

但是光有这两个模块是不够的,

  • webpack 4.x 之后将 cli 单独拎了出来,所以还需要webpack-cli模块,
  • vue项目中,我们使用了.vue单文件形式,要加载这些单文件我们需要vue-loader模块,
  • 为了转化ES6高级语法,所以需要 babel-loader @babel/core @babel/preset-env 模块
  • 需要加载css,需要 css-loader模块,(如果要使用sass,那么还需要node-sasssass-loader
  • 需要引用图片或者其他资源文件,则需要 url-loaderfile-loader
  • 每次更新代码后,我们都需要重新编译以便查看效果,这样会很麻烦,使用webpack提供的开发工具webpack-dev-server可以帮助我们在代码发生变化后自动编译代码
  • 最后我们还需要渲染html的插件html-webpack-plugin

综上,我们还需要安装如下模块

npm install vue-loader --save-dev
npm install webpack-cli webpack-dev-server --save-dev
npm install babel-loader @babel/core @babel/preset-env --save-dev
npm install css-loader --save-dev
npm install url-loader --save-dev
npm install html-webpack-plugin --save-dev

webpack开发模式

安装好模块后,回顾Nodejs项目,我们现在需要添加npm命令缩写,webpack配置文件

package.jsonscripts字段中添加npm的命令,(使用webpack-dev-server运行)

"scripts": {"dev": "webpack-dev-server --inline --progress --config webpack.config.js"},

在项目目录下新建webpack配置文件webpack.config.js,配置文件代码

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const VueLoaderPlugin = require('vue-loader/lib/plugin')module.exports = {// 配置 webopack 的入口 / 出口文件entry: {app: './src/main.js'},output: {filename: 'bundle.js',path: path.join(__dirname, 'dist')},// 配置 webpack 的服务器信息devServer: {// 默认配置为http://localhost:8080},// 定义 webpack 的模式mode: 'development',// 配置 loader 载入规则module: {rules: [{test: /\.vue$/,loader: 'vue-loader'},{test: /\.js$/,loader: 'babel-loader'},{test: /\.css$/,use: ['vue-style-loader','css-loader']},{test: /\.(jpg|png|bmp)$/,use : 'url-loader'}]},// 添加解析文件后缀,添加后在引入文件时可以省略后缀只写文件名resolve: {extensions: ['*', '.js', '.vue', '.json']},// 配置插件项plugins: [// vue-loader 15.x 之后,必须引入这个插件才能正常工作new VueLoaderPlugin(),// 用来指定渲染的模板文件new HtmlWebpackPlugin({template: './index.html'})]
}

配置好webpack后我们需要添加其他文件内容,项目结构如下

|-- node_modlues
|   |-- ...
|-- src
|   |-- App.vue
|   |-- main.js
|-- index.html
|-- package.json
|-- webpack.config.js

./index.html内容

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Vue</title>
</head>
<body><div id="app"></div>
</body>
</html>

./src/main.js内容

import Vue from 'vue'
import App from './App'new Vue({el: '#app',render: h => h(App)
})

./src/App.vue内容

<template><div id="app">Vue App</div>
</template><script>
export default {name: "App"
}
</script><style>
#app{color: gray;
}
</style>

输入命令npm run dev运行程序,就可以看到效果啦~~~,然后修改代码测试一下vue,看看效果
在这里插入图片描述

webpack编译打包

到这一步其实就相对容易了,webpack本身就是用于编译打包,webpack的配置文件也写好了,只需要使用webpack打包即可

添加build命令,然后使用npm run build命令编译打包

"scripts": {"dev": "webpack-dev-server --inline --progress --config webpack.config.js","build": "webpack --config webpack.config.js"},

打包完成后,会在项目目录下生成/dist文件夹,所有编译好的文件都在该目录下

后记

写到这里,一个基础的简单的vue项目其实就已经搭建好了,整个过程与其说是 如何从零搭建Vue项目 ,不如说是 如何使用webpack搭建项目 ,所以在今后的学习中不妨分成两个板块去学习

  • 使用 webpack 进行项目搭建,了解 webpack 的配置与命令,推荐阅读 webpack 官方中文文档
  • 如何配置 vue-loader ,推荐阅读 Vue Loader 官方中文文档

了解熟悉 webpack 可以让我们快速搭建前端框架项目或是自定义项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# WPF 用代码画一幅图(*精品*)

概述有时候我们的程序界面中需要显示一些简单的示意图&#xff0c;一般我们有原图的话直接嵌入我们程序就可以&#xff0c;但有时候我们没有原图&#xff0c;这时候我们不妨用代码自己画出来.今天小编要给大家展示的是这样一副图片&#xff1a;接下来&#xff0c;我就用代码纯手…

矿难让显卡压了那么多货咋办?NV如是说

2019独角兽企业重金招聘Python工程师标准>>> 在苏州 GTC 开幕的几天前&#xff0c;英伟达刚刚遭遇了一次股价的腰斩。 近来加密货币的热度渐低&#xff0c;受到挖矿热潮照顾许多的英伟达「矿机」销量受到打击&#xff0c;甚至出现了严重的库存危机&#xff0c;加上近…

花式看超级碗 人工智能、大数据在碗里

“超级碗”可不是一个大碗!!!超级碗(Super Bowl)是美国国家美式足球联盟(也称为国家橄榄球联盟)的年度冠军赛&#xff0c;胜者被称为“世界冠军”。超级碗一般在每年1月最后一个或2月第一个星期天举行&#xff0c;那一天称为超级碗星期天(Super Bowl Sunday)。超级碗是比赛的名…

SimMechanics/Second Generation倒立摆模型建立及初步仿真学习

笔者最近捣鼓Simulink&#xff0c;发现MATLAB的仿真模块真的十分强大&#xff0c;以前只是在命令窗口敲点代码&#xff0c;直到不小心敲入simulink&#xff0c;就一发不可收拾。话说simulink的模块化建模确实方便&#xff0c;只要拖拽框框然后双击设置属性就可以慢慢堆建自己的…

10 行代码提取复杂 Excel 数据

把 Excel 文件导入关系数据库是数据分析业务中经常要做的事情&#xff0c;但许多 Excel 文件的格式并不规整&#xff0c;需要事先将其中的数据结构化后再用 SQL 语句写入数据库。而一般情况下&#xff0c;结构化的工作量会比较大&#xff0c;而且很难通用&#xff0c;每次都要针…

人工智能模型的网络结构可视化

本文主要介绍人工智能模型的网络结构可视化的常见方法。对于使用神经网络模型来说&#xff0c;我们主要关注的是模型的输入和输出。在 ML.NET 中使用 ONNX 模型时&#xff0c;我们就需要了解这些信息&#xff0c;以便在构成神经网络的所有层之间生成连接映射。下图就是昨天 《Y…

整理ASP.NET MVC 5各种错误请求[401,403,404,500]的拦截及自定义页面处理实例

http://2sharings.com/2015/asp-net-mvc-5-custom-404-500-error-hanlde https://blog.csdn.net/yhyhyhy/article/details/51003683 ASP.NET MVC 5的开发中&#xff0c;服务器的各种错误[如&#xff1a;401&#xff08;登录授权验证&#xff09;&#xff0c;403&#xff08;禁止…

编辑器领域正发生变革?从面试看 Visual Studio Code 的崛起

Visual Studio Code&#xff08;VS Code&#xff09;的使用率在迅速上升&#xff0c;现在已经成为大多数工程师的首选编辑器&#xff0c;并似乎正迅速抢占其他顶级编辑的市场份额。Triplebyte 每周都会面试数百名工程师。在每次面试中&#xff0c;我们都会记录面试者使用的编辑…

C#7.0 ref引用传递

1.概要在工作中大家用到引用类型是非常多的&#xff0c;大家都知道引用类型在使用过程中传递的是对象引用并不会发生整个对象复制。而值类型在传递的过程中就不一样了&#xff0c;我曾经在编写代码时希望通过值类型来压低应用程序的内存占用&#xff0c;在高并发的情况大量的对…

android面试详解

前台就是和用户交互的进程 可见进程例如一个activity被一个透明的对话框覆盖&#xff0c;该activity就是可见进程 服务&#xff1a;service进程 后台一个activity按了home按键就是从前台退回到后台 标准模式&#xff1a;不管任务栈是否存在相同的activity都会创建一个新的activ…

element-ui Notification重叠问题,原因及解决办法

在1个方法中调用两次this.$notify方法&#xff0c;会出现通知框重叠的问题 methods: {checkLogin: function () {if (this.username ) {this.$notify({title: 提示,message: 请输入用户名})}if (this.password ) {this.$notify({title: 提示,message: 请输入用户密码})}}}网上…

Visual Stiudio使用技巧

技巧1 自动生成带参构造函数当我们在编写代码时会经常遇到初始化一个的类&#xff0c;需要通过构造函数进行对象初始化。那么这个时候我们可能会需要逐个去手动写&#xff0c;这样的工作即重复又无趣。如果是在项目非常紧急的情况下还有大量的字段需要与入参一一对应起来简直太…

C#性能测试BenchmarkDotnet

1.简介在我们开发高性能代码时&#xff0c;需要各种针对性能优化进行编码。那么如何才能知道我们所加的代码是否有性能方面的正向优化呢&#xff1f;有了BenchmarkDotNet&#xff0c;做性能对比测试就非常容易了&#xff0c;只需要把你的测试方法加上特性[Benchmark], 想做不同…

Requests获取连接的IP地址

在接口自动化的时候&#xff0c;需要获取到连接的本地IP地址&#xff0c;方法如下 1 import requests 2 3 rsp requests.get("http://www.baidu.com", streamTrue) 4 print rsp.raw._connection.sock.getpeername()[0] 5 print rsp.raw._connection.sock.getsockna…

阿里云APP(V4.3) SSH远程登录功能设置操作指南

阿里云APP V4.3 发布了&#xff0c;这次的升级&#xff0c;不仅在iOS和android平台上支持SSH远程登录ECS功能&#xff0c;也支持密钥登录哦~~~ SSH远程登录&#xff0c;这是一个连阿里巴巴自己的技术人员都开心不已的功能&#xff01; 各位攻城狮们&#xff0c;从更新到V4.3的那…

JS专题之节流函数

本文共 2000 字&#xff0c;读完只需 8 分钟上一篇文章讲了去抖函数&#xff0c;然后这一篇讲同样为了优化性能&#xff0c;降低事件处理频率的节流函数。 一、什么是节流&#xff1f; 节流函数&#xff08;throttle&#xff09;就是让事件处理函数&#xff08;handler&#xf…

【Flutter教程】从零构建电商应用(一)

在这个系列中&#xff0c;我们将学习如何使用google的移动开发框架flutter创建一个电商应用。本文是flutter框架系列教程的第一部分&#xff0c;将学习如何安装Flutter开发环境并创建第一个Flutter应用&#xff0c;并学习Flutter应用开发中的核心概念&#xff0c;例如widget、状…

为OWA自定义快捷键

这篇短文分享一下如何为自己常用的网页添加自定义功能&#xff0c;例如添加快捷键。我这里用一个常用的网站作为范例。它是Outlook Web Access (OWA), 它的地址一般如下。我在写邮件时希望能用一些快捷键来提高工作效率&#xff0c;但系统默认自带的快捷键特别少&#xff0c;而…

数据结构 快速排序

快速排序是对冒泡排序的一种改进&#xff0c;是所有内部排序算法中平均性能最优的排序算法。其基本思想是基于分治法的&#xff1a;在待排序数组L[1...n]中任取一个元素pivot作为基准&#xff0c;从数组的两端开始扫描。设两个指示标志&#xff08;low指向起始位置&#xff0c;…

小米人员架构调整:组建中国区,王川任总裁

12月13日上午&#xff0c;小米内部发布人员调整公开信&#xff0c;信中传达了两个重要内容&#xff1a;将销售与服务部改组为中国区&#xff0c;任命集团高级副总裁王川兼任中国区总裁。 在今年9月份&#xff0c;也就是小米上市前夕&#xff0c;雷军在一封内部信中宣布对公司组…