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,一经查实,立即删除!

相关文章

在数据库插入带小数点数据的问题

想在mysql插入以下数据设计表的时候没有注意,之前都用的int,这次换成了double,但是插入第一条3.50的时候数据库显示为:查了之后知道是设计表的时候没有注意小数点的设置转载于:https://juejin.im/post/5c0f61bb6fb9a049ea38cbe9

oracle 11g 创建 job 20

15-10-19 23:48:04分类&#xff1a; Oracle--创建一次执行的匿名块任务&#xff0c;成功调用一次后job消失BEGIN DBMS_SCHEDULER.CREATE_JOB ( job_name > my_new_job2, job_type > PLSQL_BLOCK, job_action &g…

Jzoj5317 Func

f(1)1 f(2x)f(x) f(2x1)f(x)f(x1) 给出n<10^6&#xff0c;求:所有的i满足f(i)n 第一道类欧算法 我们考虑一个性质 f(2x1)f(x)f(x1)f(2x)f(2x2) 所以&#xff0c;显然有f(2x1)>f(2x) f(2x1)>f(2x2) 那么现在我们知道了f(2x1),自然考虑枚举一个f(2x) 可以按照以下形式…

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

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

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

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

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

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

Git分支操作与远程仓库的使用

Git分支操作本地仓库创建分支合并分支删除分支远程仓库push 推送远程分支pull 拉取远程分支fetch 更新远程分支本地分支与远程分支的跟踪关系本地仓库 由于Git的分布式特性&#xff0c;所以没有绝对的本地和远程概念&#xff0c;一切都是相对的。对于分支的操作&#xff0c;个…

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

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

10 行代码提取复杂 Excel 数据

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

将一个数组拆分为若干个相等数组

var a [法国,澳大利亚,智利,新西兰,西班牙,加拿大,阿根廷,美国,0,国产,波多黎各,英国,比利时,德国,意大利,意大利]; var b []; var result []; var k 0; for(var i 0; i<a.length; i){ if(i%3 0){ b []; for(var j 0; j<3; j){ if(a[ij] undefined){ continue; …

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

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

Git 撤销操作 / 回滚历史

撤销操作 git checkout -- <filename>&#xff0c;放弃文件的当前更改&#xff0c;回到最近一次的提交状态git reset HEAD <filename>&#xff0c;取消暂存文件git commit --amend&#xff0c;覆盖上一次的提交&#xff0c;虽然不是撤销操作&#xff0c;但有类似的…

整理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;禁止…

url字符转义

作者在做短链接功能时&#xff0c;url参数里带了&字符&#xff0c;结果无法转换。后来查了一下&#xff0c;发现可以用其它符号代替。下面是对应表 URL 中号表示空格 %2B 空格 URL中的空格可以用号或者编码 %20 / 分隔目…

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

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

C#7.0 ref引用传递

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

Vue+Axios同步请求

axios本身是没有同步请求的&#xff0c;要实现同步请求&#xff0c;用到的是ES7的async和await ES7的异步特性async / await async用于声明一个函数是异步的&#xff0c;await用于声明在一个异步函数中等待语句执行完毕。也就是说await只能在async函数中使用。简单示例如下&a…

关于vue执行打包后,如何在本地浏览问题

最近一个人在捣鼓vue&#xff0c;写完项目后发现在npm run dev下可以正常访问&#xff0c;bulid之后却一片空白&#xff0c;查看console出现许多Failed to load resource: net::ERR_FILE_NOT_FOUND。恩&#xff0c;看了下网上评论找到了正确的方法 webpack.prod.conf.js 中outp…

ELFhash

字符串哈希算法&#xff08;以ELFHash详解&#xff09; 更多字符串哈希算法请参考&#xff1a;http://blog.csdn.net/AlburtHoffman/article/details/19641123 先来了解一下何为哈希&#xff1a; 哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映射到一个有限的地…

android面试详解

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