依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 27|回复: 0

不借助 vue-cli 工具自行搭建 vue 项目

[复制链接] 主动推送

738

主题

744

帖子

1098

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1098
发表于 2024-5-7 17:44:17 | 显示全部楼层 |阅读模式
一、初始化项目
1.1、新建 package.json
  1. npm init
复制代码
1.2、安装依赖
npm 安装 vue、vue-router、vue-loader、webpack、webpack-cli,这些只是开发环境所需要的依赖,使用 --save-dev 安装到开发环境(见 package.json devDependencies)下:
  1. npm install vue vue-router vue-loader webpack webpack-cli --save-dev
复制代码
webpack 4.x 已经把 cli 单独拎出来了,所以还要安装 webpack-cli。webpack 本身其实直接能处理的只有 js 资源,是通过各种 loader 让其他资源可以被 webpack 打包处理。

用 vue 写单文件组件(.vue 文件),安装 vue-loader。
1.3、创建项目目录、文件
  1. │  index.html
  2. │  package.json
  3. │  README.md

  4. └─src
  5.     │  App.vue
  6.     │  main.js
  7.     │  
  8.     ├─assets
  9.     │  └─images
  10.     │          pic.png
  11.     │         
  12.     ├─components
  13.     ├─router
  14.     │      index.js
  15.     │      
  16.     ├─utils
  17.     └─views
  18.             About.vue
  19.             Home.vue
复制代码
src/App.vue
  1. <template>
  2.   <div id="app">
  3.     {{message}}
  4.   </div>
  5. </template>

  6. <script>
  7. export default {
  8.   name: "App",
  9.   data() {
  10.     return {
  11.       message: "Hello!"
  12.     }
  13.   }
  14. }
  15. </script>
复制代码
src/main.js
  1. import Vue from 'vue'
  2. import App from "./App.vue"

  3. // 创建 Vue 实例
  4. new Vue({
  5.   router,
  6.   render: h => h(App)
  7. }).$mount("#app")
复制代码
index.html
  1. <!DOCTYPE html>
  2. <html lang="en">

  3. <head>
  4.   <meta charset="UTF-8">
  5.   <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.   <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7.   <title>custom-project-vue</title>
  8. </head>

  9. <body>
  10.   <div id="app"></div>
  11. </body>

  12. </html>
复制代码
二、webpack 基本配置
2.1、添加配置文件
根目录下新建 webpack.config.js,配置 webpack:
  1. const path = require('path') // 系统路径模块
  2. const htmlWebpackPlugin = require('html-webpack-plugin') // 引入模板渲染插件
  3. const VueLoaderPlugin = require('vue-loader/lib/plugin') // 将你定义过的其它规则复制并应用到 .vue 文件里相应语言的块

  4. module.exports = {
  5.   entry: path.join(__dirname, './src/main.js'), // 项目总入口 js 文件
  6.   // 输出文件
  7.   output: {
  8.     path: path.join(__dirname, 'dist'), // 所有的文件都输出到 dist 目录下
  9.     filename: 'bundle-[hash].js' // 输出文件的名称加上 hash 值
  10.   },
  11.   module: {
  12.     rules: [{
  13.         // 使用 vue-loader 解析 .vue 文件
  14.         test: /\.vue$/,
  15.         loader: 'vue-loader'
  16.       },
  17.       {
  18.         test: /\.css$/,
  19.         // 要加上 style-loader 才能正确解析 .vue 文件里的 <style> 标签内容
  20.         use: ['style-loader', 'css-loader']
  21.       }
  22.     ]
  23.   },
  24.   plugins: [
  25.     new htmlWebpackPlugin({
  26.       filename: 'index.html', // 生成的文件名称
  27.       template: 'index.html', // 指定用 index.html 做模版
  28.       inject: 'body' // 指定插入的 <script> 标签在 body 底部
  29.     }),
  30.     new VueLoaderPlugin()
  31.   ]
  32. }
复制代码
添加了一些引用 style-loader、css-loader,需要安装:
  1. npm install html-webpack-plugin style-loader css-loader vue-template-compiler --save-dev
复制代码
安装并引入 html-webpack-plugin 的目的是在打包项目的时候,在 dist 文件夹下也会生成 index.html 文件,也会添加上对出口文件的引用。

2.2、开启本地服务
webpack-dev-server 可以在本地启动一个服务器,而且当有任何文件修改的时候会自动重新打包,并且刷新浏览器页面。

安装 webpack-dev-server,配置本地开发环境:
  1. npm install webpack-dev-server cross-env --save-dev
复制代码

用上 cross-env 是因为要修改 package.json 里的 scripts,而不同的平台写 scripts 的方式不一样。

修改 package.json 里的 scripts:

  1.   "scripts": {
  2.     "test": "echo "Error: no test specified" && exit 1",
  3.     "dev": "cross-env NODE_ENV=development webpack-dev-server --inline --hot --open --config webpack.config.js"
  4.   },
复制代码

执行 npm run dev,项目成功启动后会自动打开浏览器。

2.3、添加构建脚本

在 package.json 文件的 scripts 属性里添加 build 脚本:

  1.   "scripts": {
  2.     "test": "echo "Error: no test specified" && exit 1",
  3.     "dev": "cross-env NODE_ENV=development webpack-dev-server --inline --hot --open --config webpack.config.js",
  4.     "build": "webpack --config webpack.config.js"
  5.   },
复制代码

2.4、打包项目测试

完成以上配置后运行 npm run build 来构建项目,可以看到在当前目录下生成了一个 dist 目录,目录下有一个 bundle.js 和 index.html 文件,这就是打包好的项目。


2.5、添加图片、CSS 预处理器等 loader

图片 loader 用的是 url-loader,它依赖于 file-loader,比 file-loader 多了一个可以把小于一定大小的图片直接转化成 base64 的形式插入到 html 页面,可以减少网络请求。


安装依赖:

  1. npm install file-loader url-loader node-sass sass-loader --save-dev
复制代码

修改 webpack.config.js,在 module rules 下添加:

  1. // ...
  2. {
  3.     test: /\.scss$/,
  4.     use: [
  5.         // 处理顺序是从 sass-loader 到 style-loader
  6.         'style-loader',
  7.         'css-loader',
  8.         'sass-loader'
  9.     ]
  10. }, {
  11.     test: /\.(gif|jpg|jpeg|png|svg)$/i,
  12.     use: [{
  13.         loader: 'url-loader',
  14.         options: {
  15.             // 当文件大小小于 limit byte 时会把图片转换为 base64 编码的 dataurl,否则返回普通的图片
  16.             limit: 5120000, // 500k 以下转为 base64
  17.             name: 'dist/assest/images/[name]-[hash:5].[ext]' // 图片文件名称加上内容哈希
  18.         }
  19.     }]
  20. }
  21. // ...
复制代码
2.6、添加 postcss-loader + autoprefixer,自动添加 css 浏览器前缀
  1. npm install postcss-loader autoprefixer --save-dev
复制代码
新增 postcss 配置文件 postcss.config.js:
  1. const autoprefixer = require('autoprefixer')

  2. module.exports = {
  3.   plugins: [
  4.     autoprefixer({
  5.       browsers: ['last 5 versions']
  6.     })
  7.   ]
  8. }
复制代码
webpack.config.js:
  1.       {
  2.         test: /\.css$/,
  3.         // 要加上 style-loader 才能正确解析 .vue 文件里的 <style> 标签内容
  4.         use: ['style-loader', {
  5.             loader: 'css-loader',
  6.             options: {
  7.               importLoaders: 1
  8.             }
  9.           },
  10.           'postcss-loader'
  11.         ]
  12.       },
  13.       {
  14.         test: /\.scss$/,
  15.         use: [
  16.           // 处理顺序是从 sass-loader 到 style-loader
  17.           'style-loader',
  18.           'css-loader',
  19.           {
  20.             loader: 'postcss-loader',
  21.             options: {
  22.               sourceMap: true
  23.             }
  24.           },
  25.           'sass-loader'
  26.         ]
  27.       },
复制代码
2.7、添加 babel-loader,转译 es6 代码为 es5 代码

项目根目录创建 .babelrc 文件:

  1. {
  2.   "presets": [
  3.     "env"
  4.   ]
  5. }
复制代码

安装依赖:

  1. npm install babel-loader@7 babel-core babel-preset-env --save-dev
复制代码

修改 webpack.config.js,module.rules 再加一条:

  1.       {
  2.         // 转译 es6 代码为 es5 代码
  3.         test: /\.js$/,
  4.         exclude: /(node_modules|bower_components)/, // 不处理这两个文件夹里的内容
  5.         loader: 'babel-loader'
  6.       }
复制代码

2.8、清除旧的 bundle.js

每次修改文件,npm run build 之后,都会生成一个新的 bundle-[hash].js 文件,添加 clean-webpack-plugin,每次 build 之前可以自动先清除输出文件夹。


安装 clean-webpack-plugin:

  1. npm install clean-webpack-plugin --save-d
复制代码

修改 webpack.config.js,引入 clean-webpack-plugin 并在 plugins 数组添加一项:

  1. const {
  2.   CleanWebpackPlugin
  3. } = require("clean-webpack-plugin") // 清除输出文件夹


  4.   plugins: [
  5.     new CleanWebpackPlugin()
  6.   ]
复制代码
2.9、添加可以自动解析的扩展

import 的时候可以不用写后缀也能正确引用文件,例如:

  1. import App from './App'
复制代码

打开 webpack.config.js,添加 resolve:

  1.   resolve: {
  2.     extensions: ['.js', '.json', '.vue']
  3.   },
复制代码
三、路由配置

src/router/index.js

  1. import Vue from 'vue'
  2. import VueRouter from 'vue-router'
  3. import Home from '../views/Home.vue'
  4. import About from '../views/About.vue'

  5. Vue.use(VueRouter)

  6. const routes = [{
  7.     path: '/',
  8.     name: 'Home',
  9.     component: Home
  10.   },
  11.   {
  12.     path: '/about',
  13.     name: 'About',
  14.     component: About
  15.   }
  16. ]

  17. const router = new VueRouter({
  18.   routes
  19. })

  20. export default router
复制代码

在 main.js 中引入路由配置文件:

  1. import router from './router'
复制代码

在 App.vue 中添加 router-link:

  1. <template>
  2.   <div id="app">
  3.     <router-view></router-view>
  4.     <router-link to="/">首页</router-link>
  5.     <router-link to="/about">关于
  6.     </router-link>
  7.   </div>
  8. </template>
复制代码

项目结构:

  1. │  .babelrc
  2. │  .gitignore
  3. │  index.html
  4. │  LICENSE
  5. │  package-lock.json
  6. │  package.json
  7. │  postcss.config.js
  8. │  README.md
  9. │  webpack.config.js
  10. │  
  11. ├─dist
  12. │      bundle-40277308b55fa87c0dd3.js
  13. │      index.html
  14. │              
  15. └─src
  16.     │  App.vue
  17.     │  main.js
  18.     │  
  19.     ├─assets
  20.     │  └─images
  21.     │          pic.png
  22.     │         
  23.     ├─components
  24.     ├─router
  25.     │      index.js
  26.     │      
  27.     ├─utils
  28.     └─views
  29.             About.vue
  30.             Home.vue
复制代码



游客,本帖隐藏的内容需要积分高于 2 才可浏览,您当前积分为 0

提取码下载:

文件名称:提取码下载.txt 
下载次数:0  文件大小:12 Bytes  售价:3金钱 [记录]
下载权限: 不限 [购买VIP]   [充值]   [在线充值]   【VIP会员5折;永久VIP免费】
安全检测,请放心下载





相关帖子

扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员5折;永久VIP免费
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|依星源码资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2024-5-19 21:18

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表