位置: IT常识 - 正文

从0到1搭建Vue项目(webpack版)(vue从0创建一个项目)

编辑:rootadmin
从0到1搭建Vue项目(webpack版)

目录

最终项目目录文件夹和文件

1.初始化项目

2. 安装相关依赖

3.配置webpack 

4.编写项目文件和配置webpack

5.下面为它添加其他功能

(1)ts的使用

(2)less的使用

(3)配置babel

(4)路由vue-router的使用

(5)状态管理pinic的使用

(6)使用webpack-merge进行多环境配置

最后页面


最终项目目录文件夹和文件 |-/node_modules |-/dist |-/public |-index.html |-/src |-/assets |-/components |-App.vue |-/router |-index.js |-/store |-index.ts |-/views |-about.vue |-home.vue|-App.vue|-main.ts |-shims-vue.d.ts |-package-lock.json |-package.json |-webpack.common.js |-webpack.dev.js |-webpack.prod.js |-.babelrc 1.初始化项目npm init2. 安装相关依赖

推荐整理分享从0到1搭建Vue项目(webpack版)(vue从0创建一个项目),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:用vue做一个简单的项目,vue从0创建一个项目,从零开始搭建vue项目,从零开始搭建vue开发环境,搭建vuecli,从零开始搭建vue开发环境,如何建一个vue项目,从0到1搭建vue项目,内容如对您有帮助,希望把文章链接给更多的朋友!

(1)安装webpack,注意这里是在本地安装,而不是全局安装。

npm install webpack webpack-cli --save-dev

(2)安装Vue3和解析模块

npm install vue@nextnpm install vue-loader@nextnpm install @vue/compiler-sfc

npm install vue@next 时遇到

npm WARN deprecated sourcemap-codec@1.4.8: Please use @jridgewell/sourcemap-codec instead

使用npm install -g npm 将npm升到最新版

todo1:

@vue/compiler-sfc依赖的作用和使用场景,构建项目中没用到?

vue-loader具体做了什么

(3)安装css解析模块

npm install css-loadernpm install style-loader

(4)安装url-loader filr-loader (处理图片,文件)

npm install url-loadernpm install file-loader3.配置webpack 

(1)安装html-webpack-plugin

htmlWebpackPlugin能让你省去在dist下创建index.html的麻烦,它能够自动根据main.js创建html文件,或者可以自定义模板。

npm install --save-dev html-webpack-plugin

(2)安装webpack-dev-server

webpack-dev-server提供了一个基本的web server环境,并且内置了热更新功能,但是我们并不需要,因为vue-loader已经有热更新了

npm install --save-dev webpack-dev-server4.编写项目文件和配置webpack

接下来配置各个文件

配置根目录下webpack.config.js文件

const path = require('path');//vue-loader@next版本之后需要引入这个插件const { VueLoaderPlugin } = require('vue-loader');const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = { entry: './src/main.js', //打包的入口 //设置打包的出口 output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist'), clean: true, }, //设置别名 resolve: { alias: { '@': path.join(__dirname, 'src'), }, extensions: ['.vue', '.js'], }, //添加模块 module: { rules: [ { //设置.vue文件的解析规则 test: /\.vue$/, use: 'vue-loader', }, { //设置css的解析规则 test: /\.css$/, use: [{ loader: 'style-loader' }, { loader: 'css-loader' }], }, { //设置加载图片资源的规则 test: /\.(png|jpe?g|gif)$/i, use: [ { loader: 'url-loader', }, ], }, ], }, plugins: [ new VueLoaderPlugin(), new HtmlWebpackPlugin({ filename: 'index.html', //配置输出后的html文件名(可携带目录) template: './public/index.html', //配置模板 title: 'Production', }), ], performance: { hints: 'warning', // 枚举 maxAssetSize: 30000000, // 整数类型(以字节为单位) maxEntrypointSize: 50000000, // 整数类型(以字节为单位) assetFilter: function (assetFilename) { // //只给出 js 文件的性能提示 return assetFilename.endsWith('.js'); }, },};

配置src > components >App.vue 文件

<template> <div>搭建Vue项目成功</div></template><style>div{color:red;}</style>

配置 src > main.js 文件

import { createApp } from 'vue'import App from './components/App.vue'const app = createApp(App)app.mount('#app')

修改package.json文件

{ -"main": "index.js",//符号“ - ”代表删除这一行代码 "scripts": { +"build": "webpack", +"dev": "webpack-dev-server", },}

配置 public >index.html文件内容

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

启动项目

npm run dev

命令执行完毕后,我们可以通过上图红框的地址访问我们的项目。 到了这一步,已经有了一个简易的Vue3的开发环境了,实现了热更新开发,和打包项目的基本功能。

5.下面为它添加其他功能(1)less的使用npm install less less-loader --save-dev

在.vue文件中使用less 在App.vue文件中,只需要在style节点加上lang="less"属性,即可可直接使用less

<style lang="less">@color: blue;div { color: @color;}</style>

在webpack.config.js中module.rules中增加less的rules

{ test: /\.less$/, use: [ { loader: 'style-loader' }, { loader: 'css-loader' }, { loader: 'less-loader' }, ], },

引入全局的less文件 假设有一个包含全局样式的less文件,路径是src/assets/common.less,内容如下

@beautiful-color: red;

body {     background-color: @beautiful-color; }

接下来在main.js中引入一下即可

从0到1搭建Vue项目(webpack版)(vue从0创建一个项目)

import '@/assets/common.less';

(2)ts的使用npm install ts-loader typescript --save-dev

在webpack.config.js中修改,

新增'.ts'

extensions: ['.js', '.vue', '.ts'],

 打包入口改为

entry: './src/main.ts', 

 module.rules中增加ts的rules

{ test: /\.tsx?$/, loader: 'ts-loader', exclude: /node_modules/, options: { appendTsSuffixTo: [/\.vue$/], }, },

在项目根目录下新增tsconfig.json

{ "compilerOptions": { "target": "esnext", "module": "esnext", "strict": false, "jsx": "preserve", "moduleResolution": "node" }}

 由于 TypeScript 默认并不支持 *.vue 后缀的文件,所以在 vue 项目中引入的时候需要创建一个 vue-shim.d.ts 文件,放在根目录下

declare module '*.vue' { import type { DefineComponent } from 'vue'; const component: DefineComponent<{}, {}, any>; export default component;}

在.vue文件中使用ts测试

<template> <div>{{ test }}</div></template><script lang="ts" setup>type abc = { index?: number}const test: string = 'hello'const val: abc = {}</script><style>div{color:red;}</style>(3)配置babelnpm install babel-loader --save -devnpm install @babel/plugin-transform-runtime --save --devnpm install @babel/preset-env --save -dev

在webpack.config.js中module.rules新增

{ test: /\.js$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-env'], // *引入预设 plugins: [ [ '@babel/plugin-transform-runtime' // *配置插件信息 ] ] } }}

todo2:

babel7+支持对ts文件的转换,可以使用@babel/preset-typescript,替代ts-loader

但其缺少ts对文件的类型检查功能

(4)路由vue-router的使用npm i vue-router --save

配置router/index.js,

import { createRouter, createWebHashHistory } from 'vue-router'const routes = [ { path: '/', name: 'Home', component: () => import('../views/home.vue') }, { path: '/about', name: 'About', component: () => import(/* webpackChunkName: "about" */ '../views/about.vue') }]const router = createRouter({ history: createWebHashHistory(), routes})export default router

在main.js中引入vue-router

import { createApp } from 'vue'import App from './components/App.vue'import router from './router'let app = createApp(App)app.use(router)app.mount('#app')

在App.vue中添加

<template> <div>{{ test }}</div> <p> <button> <router-link to="/about">跳转</router-link> </button> <button> <router-link to="/">返回主页面</router-link> </button> </p> <router-view></router-view></template>

  配置测试页面(home.vue,about.vue)

about.vue

<template> <div>跳转页面成功</div></template><script>export default { data(){ return { } }}</script><style></style>

home.vue

<template> <div>现在处于主页面</div></template><script>export default { data(){ return { } }}</script><style></style>

配置和引入完成后,vue-router就可以正常使用了

(5)状态管理pinic的使用npm install pinia --save -dev

main.ts中添加

// main.ts 文件import { createApp } from 'vue'import App from './components/App.vue'import {createPinia} from 'pinia'import router from './router'// 创建 Pinia 实例const pinia = createPinia()// 创建 Vue 实例const app = createApp(App)// 挂载到 Vue 根实例app.use(pinia)app.use(router)app.mount('#app')

在src文件下创建一个store文件夹,并添加index.ts

import { defineStore } from 'pinia';export const useMainStore = defineStore('main', { state: () => { return { info: 'pinia 可以使用', count: 0, }; }, getters:{ count10(){ return this.count += 10 } }, actions:{ changeState (){ this.count += 10 this.info = "actions修改数据" } }});

App.vue为

<template> <div>{{ test }}</div> <hr /> <p> <button> <router-link to="/about">跳转</router-link> </button> <button> <router-link to="/">返回主页面</router-link> </button> </p> <router-view></router-view> <hr /> <div>{{ info }} , 结果为{{ count }}</div> <p> <button @click="alertData">数据加十</button> </p></template><script lang="ts" setup>type abc = { index?: number}const test: string = 'hello'const val: abc = {}import { toRefs } from 'vue'import { storeToRefs } from 'pinia'import { useMainStore } from '../store'const mainStore = useMainStore()const { count, info } = storeToRefs(mainStore)const alertData = () => { mainStore.changeState()}</script><style lang="less">@color: blue;div { color: @color;}</style>(6)使用webpack-merge进行多环境配置npm install --save-dev webpack-merge

将webpack.config.js 全局webpack配置 改名为 webpack.common.js 公共配置,并去掉mode参数

示例,不同环境下项目启动端口不同,只写增量不同的部分

+ |- webpack.dev.js // 新建开发环境配置

// 引入webpack-mergeconst { merge } = require('webpack-merge');// 引入公共配置const common = require('./webpack.common.js');// 第一个参数是公共配置 第二个参数是环境里的配置module.exports = merge(common, { mode: 'development', devtool: 'inline-source-map', //配置webpack-dev-server将dist下的目录代理到web server devServer: { static: './dist', open: true, // 端口号 port: 8082, },});

+ |- webpack.prod.js // 新建生产环境配置

// 引入webpack-mergeconst { merge } = require('webpack-merge');// 引入公共配置const common = require('./webpack.common.js');// 第一个参数是公共配置 第二个参数是环境里的配置module.exports = merge(common, { mode: 'production', devtool: 'inline-source-map', //配置webpack-dev-server将dist下的目录代理到web server devServer: { static: './dist', open: true, // 端口号 port: 8083, },});

todo3:

生产环境配置完善

修改package.json中的启动命令

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

使用npm run dev,开发环境下服务成功启动,端口号为8082

使用npm run prod,生产环境下服务成功启动,端口号为8083

最后页面

本文链接地址:https://www.jiuchutong.com/zhishi/300543.html 转载请保留说明!

上一篇:《web应用技术》学习规划日程表(web应用技术是什么)

下一篇:Python数学建模系列(一):规划问题之线性规划(python进行数学建模)

  • qq浮屏怎么取消掉(新版qq浮屏怎样关掉)

    qq浮屏怎么取消掉(新版qq浮屏怎样关掉)

  • 华为Mate 20 Pro手机充电需要多久(华为mate20pro手电筒快捷键)

    华为Mate 20 Pro手机充电需要多久(华为mate20pro手电筒快捷键)

  • 华为mate20文件管理在哪里(华为mate20文件管理怎么找)

    华为mate20文件管理在哪里(华为mate20文件管理怎么找)

  • 电脑怎么关闭小键盘(电脑怎么关闭小组件)

    电脑怎么关闭小键盘(电脑怎么关闭小组件)

  • 钉钉老师发起的签到不显示(钉钉老师发起的会议不显示)

    钉钉老师发起的签到不显示(钉钉老师发起的会议不显示)

  • 为什么我的抖音没有合集功能(为什么我的抖音没有橱窗功能)

    为什么我的抖音没有合集功能(为什么我的抖音没有橱窗功能)

  • 小米haylou智能手表功能介绍(小米haylou智能手表app下载)

    小米haylou智能手表功能介绍(小米haylou智能手表app下载)

  • 苹果手机应用怎么隐藏(苹果手机应用怎么分屏)

    苹果手机应用怎么隐藏(苹果手机应用怎么分屏)

  • qq音乐访客数量不对(qq音乐访客数量却没有增加)

    qq音乐访客数量不对(qq音乐访客数量却没有增加)

  • 苹果手机短信带个叹号(苹果手机短信带月牙是怎么回事)

    苹果手机短信带个叹号(苹果手机短信带月牙是怎么回事)

  • 讯飞输入法繁体字改成简体怎么改(讯飞输入法繁体字怎么打)

    讯飞输入法繁体字改成简体怎么改(讯飞输入法繁体字怎么打)

  • 抖音禁止播放处理是什么意思(抖音禁止播放处理多久)

    抖音禁止播放处理是什么意思(抖音禁止播放处理多久)

  • 手机电池膨胀怎么处理(手机电池膨胀怎么办办)

    手机电池膨胀怎么处理(手机电池膨胀怎么办办)

  • 高斯投影是等面积投影吗(高斯投影是一种等角投影吗)

    高斯投影是等面积投影吗(高斯投影是一种等角投影吗)

  • ip68级防水可以游泳吗(IP68级防水可以防尘吗)

    ip68级防水可以游泳吗(IP68级防水可以防尘吗)

  • iphone7plus可以快充吗(iphone7plus支持快充电吗)

    iphone7plus可以快充吗(iphone7plus支持快充电吗)

  • 苹果11天气怎么搜索不出来(苹果11天气怎么设置到桌面小方块)

    苹果11天气怎么搜索不出来(苹果11天气怎么设置到桌面小方块)

  • 手机自动断网怎么回事(手机自动断网怎么弄)

    手机自动断网怎么回事(手机自动断网怎么弄)

  • 空间小秘密怎么打开(空间小秘密怎么打开2021)

    空间小秘密怎么打开(空间小秘密怎么打开2021)

  • 苹果手机怎么恢复微信草稿(苹果手机怎么恢复出厂设置抹掉所有内容)

    苹果手机怎么恢复微信草稿(苹果手机怎么恢复出厂设置抹掉所有内容)

  • oppo手机怎么添加插件(oppo手机怎么添加桌面)

    oppo手机怎么添加插件(oppo手机怎么添加桌面)

  • iphone8是否需要贴膜(苹果8需不需要更新ios14)

    iphone8是否需要贴膜(苹果8需不需要更新ios14)

  • amoled和oled哪个伤眼(amoled和oled哪个屏幕好)

    amoled和oled哪个伤眼(amoled和oled哪个屏幕好)

  • ios13怎么改微信通知声音(ios13.7怎么改微信提示音)

    ios13怎么改微信通知声音(ios13.7怎么改微信提示音)

  • 照片被清理了怎么恢复(照片被清理了怎么找回或恢复)

    照片被清理了怎么恢复(照片被清理了怎么找回或恢复)

  • 8个月前通话记录怎么查(8年前的通话记录)

    8个月前通话记录怎么查(8年前的通话记录)

  • 小规模企业所得税会计分录怎么做
  • 设在西部地区的鼓励类产业企业减按15%怎么填
  • 集体房屋出租管理办法
  • 外地多预交的税款申报时该怎么填写?
  • 纳税调整会计处理
  • 记账王怎么查询凭证
  • 增值税可以退税嘛
  • 计提工资和实际发放工资必须一致吗
  • 信用卡到账手续费
  • 审计报告报备
  • 企业是否可以查员工亲属关系
  • 社保公司部分交多少比例
  • 暂估入库必须次日入库吗
  • 托收承付怎么理解
  • 新公司做财务
  • 现金余额大违反了什么规定
  • 其他应付款款
  • 开办费如何做纳税调增
  • 公司茶水间备的零食该计入什么会计科目核算?
  • 发票打印机分专票和普票的吗?
  • 营改增后发票报销管理规定是怎样的?
  • 固定资产进项税额怎么抵扣
  • 免抵退转免税
  • 自己是公司法人可以给自己发工资吗
  • 分包开普通发票还是增值税专用发票?
  • 无形资产一般采用直线法摊销也可采用加速法进行摊销
  • 维修机器设备买什么好
  • 苹果mac系统桌面空间不够
  • 简述linux系统
  • Apache+php+mysql在windows下的安装与配置图解(最新版)
  • 微信用不升级
  • 是谁唤醒你
  • 缴纳增值税的会计处理方法
  • 建筑劳务公司何去何从
  • 框架开源
  • 没有关系怎么表达
  • 税前弥补以前年度亏损
  • python jsdom
  • 公司买办公用品是谁的工作
  • 电影制片过程
  • python搜索函数
  • 报销人和收款人是一个人
  • 银行会计的基本核算方法包括的内容有
  • 先销售后开发票的如何做帐?
  • 管理费用主要核算哪些内容
  • 车船税发票可以抵扣吗
  • 发票税额不全能抵扣吗
  • 跨月的普通发票能作废吗
  • 实收资本的入账金额包括消费税吗
  • 上一年度主营业务成本多计提了
  • 小规模纳税人涉嫌虚开发票
  • 建筑施工企业在12个月内第三次发生生产安全事故的
  • 投资和注册资本
  • 其他应收款项
  • 补计提上一年度工资
  • 影响折旧的因素有哪三个方面
  • 账簿的设置和登记要点
  • centosgui
  • win7系统怎么关闭病毒防护
  • 系统技巧 制作流程
  • xp系统怎么禁止软件联网
  • mac2020怎么换开机背景
  • 电脑联想windows7
  • Centos 6.4 安装dnsmasq的方法
  • linux isolcpus
  • cocos2dx游戏案例
  • jquery fadein 源码
  • 创建nodejs 基于express项目
  • 构造函数中super()的作用
  • cocos2d-x教程
  • cmd命令可以干嘛
  • JavaScript中关于模板字符串
  • 安卓新安装包
  • js设置
  • jquery 树结构
  • react navigate
  • 中国税务定额发票怎么开
  • 企业的赞助费如何入账
  • 徐州房产过户手续流程
  • 冀地是哪里
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设