webpack-从零搭建vue过程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webpack-从零搭建vue过程相关的知识,希望对你有一定的参考价值。
参考技术A 执行了npm init之后,会让我们填写一些配置信息,如果还不知道怎么填写的话可以一路回车,会生成一个pakeage.json文件,文件内容如下:当使用 vue-loader 或 vueify 的时候,*.vue 文件内部的模板会在构建时预编译成 javascript。你在最终打好的包里实际上是不需要编译器的,所以只用运行时版本即可。
因为运行时版本相比完整版体积要小大约 30%,所以应该尽可能使用这个版本。如果你仍然希望使用完整版,则需要在打包工具里配置一个别名:
在webpack.config.js配置一下vue-loader
Vue-loader在15.*之后的版本都是 vue-loader的使用都是需要伴生 VueLoaderPlugin的,所以在webpack.config.js中加入
先安装html-webpack-plugin插件 npm install --save-dev html-webpack-plugin,然后配置webpack.config.js
先安装webpack-dev-server;npm install webpack-dev-server --save-dev
然后在webpack.config.js文件配置:
最后在package.json文件配置一下运行webpack-dev-server的脚本
Vue+webpack从零搭建工程项目
基础项目搭建
准备工作
# vscode 打开命令行
ctrl + `(esc下面的键)
# 在目录下面,初始化一个 npm项目
npm init
# 安装库
npm i webpack vue vue-loader
# 根据提示安装其他的库
npm i css-loader
npm i vue-template-compiler
项目目录介绍
dist //将打包的资源输出目录
node_modules // 安装的库目录
src // 源码目录
app.vue // vue初始组件
index.js //入口文件
package.json //项目配置信息文件,在用 npm init命令后生成
webpack-config.js //webpack打包配置文件
app.vue
// html代码
<template>
<div class="title"> {{text}}</div>
</template>
// js代码
<script>
export default {
data(){
return{
text :"hello world"
}
}
}
</script>
// css代码
<style>
.title{
color: red;
}
</style>
index.js
// 将组件挂载到vue当中
import Vue from ‘vue‘
import App from ‘./app.vue‘
// 将 vue组件挂载到一个 root节点中
const root = document.createElement(‘div‘)
document.body.appendChild(root)
new Vue({
render:(h)=>h(App)
}).$mount(root)
webpack.config.js 打包配置
// webpack打包资源的配置 图片,js,html等
// node.js基础包
const path = require(‘path‘)
const VueLoaderPlugin = require(‘vue-loader/lib/plugin‘);
module.exports={
//程序入口文件,将当前的目录与后面的地址拼接
entry:path.join(__dirname,‘src/index.js‘),
//输出路径,webpack将 vue等信息打包为一个可以在浏览器运行的js文件
output:{
filename:‘bundle.js‘,
path:path.joinnpm i style-loader url-loader file-loader(__dirname,‘dist‘)
},
plugins: [
// make sure to include the plugin for the magic
new VueLoaderPlugin()
],
// 指定用什么处理 vue文件, webpack不能处理 vue文件
module:{
rules:[
{
test:/.vue$/,
loader:‘vue-loader‘
}
]
}
}
package.json
{
"name": "todolist",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1",
"build":"webpack --config webpack.config.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"css-loader": "^2.1.0",
"vue": "^2.5.21",
"vue-loader": "^15.4.2",
"webpack": "^4.28.2"
}
}
tips: 需要在此处配置,使用项目中的webpack ,在命令行中执行用的是全局的 webpack "build":"webpack --config webapck.config.js"
编译
npm run build
# 编译时可能提示需要安装库安装即可
# npm install -D webpack-cli
编译问题
You may need an appropriate loader to handle this file type.?
webpack只能处理js es5的文件,对 vue类型的文件,不能处理,我们需要手动指定处理规则
查看 bunde.js代码,在这个其实有 vue代码, webpack 做的就是把 静态资源打包成 js文件,便于浏览器处理
webpack静态资源的处理
安装库
npm i style-loader url-loader file-loader
npm i stylus stylus-loader
配置信息
// webpack打包资源的配置 图片,js,html等
// node.js基础包
const path = require(‘path‘)
const VueLoaderPlugin = require(‘vue-loader/lib/plugin‘);
module.exports={
//程序入口文件,将当前的目录与后面的地址拼接
entry:path.join(__dirname,‘src/index.js‘),
//输出路径,webpack将 vue等信息打包为一个可以在浏览器运行的js文件
output:{
filename:‘bundle.js‘,
path:path.join(__dirname,‘dist‘)
},
plugins: [
// make sure to include the plugin for the magic
new VueLoaderPlugin()
],
module:{
rules:[
{
// 指定vue-loader处理 vue文件, 处理 vue文件
test:/.vue$/,
loader:‘vue-loader‘
},
{
//处理 css
test:/.css$/,
// 使用css-loader读取内容,用 style-loader处理css写入到html代码中去
use:[
‘style-loader‘,
‘css-loader‘
]
},
{
// css 预处理文件
test:/.styl/,
use:[
‘style-loader‘,
‘css-loader‘,
‘stylus-loader‘
]
},
{
// 图片处理的 loader
test:/.(gif|jpg|jpeg|png|svg)$/,
use:[
{
// 使用 url-loader(依赖于file-loader)处理 图片资源,options是要给url-loader传递的参数
loader:‘url-loader‘,
options:{
// 如果文件的大小小于1024kb,将将其转换为base64代码,存入html中
limit:1024,
// 输出图片原先的名字
name:‘[name]-rao.[ext]‘
}
}
]
}
]
}
}
那么配置之后,就可以在js代码中 import 非js内容. index.js文件
// 引入非js.代码
import Vue from ‘vue‘
import App from ‘./app.vue‘
import ‘./assets/styles/todo.css‘
import ‘./assets/images/todo.png‘
import ‘./assets/styles/todo-stylus.styl‘
// 将 vue组件挂载到一个 root节点中
const root = document.createElement(‘div‘)
document.body.appendChild(root)
new Vue({
render:(h)=>h(App)
}).$mount(root)
webpack-dev-server的配置和使用
安装库
// 开发服务器
npm i webpack-dev-server
// 环境的切换 适应不同的平台
npm i cross-env
// html插件
npm i html-webpack-plugin
在 package.json配置 dev-server
"scripts": {
"test": "echo "Error: no test specified" && exit 1",
"build": "cross-env NODE_ENV=production webpack --config webpack.config.js",
"dev": "cross-env NODE_ENV=development webpack-dev-server --config webpack.config.js"
},
webpack.cofig.js配置
// webpack打包资源的配置 图片,js,html等
// node.js基础包
const path = require(‘path‘)
const VueLoaderPlugin = require(‘vue-loader/lib/plugin‘);
const HTMLPlugin = require(‘html-webpack-plugin‘)
const webpack = require(‘webpack‘)
// 设置的环境变量存储在 process.env中
const isDev = process.env.NODE_ENV===‘development‘
const config ={
// 指定webpack的编译目标是web平台
target:‘web‘,
//程序入口文件,将当前的目录与后面的地址拼接
entry:path.join(__dirname,‘src/index.js‘),
//输出路径,webpack将 vue等信息打包为一个可以在浏览器运行的js文件
output:{
filename:‘bundle.js‘,
path:path.join(__dirname,‘dist‘)
},
plugins: [
// make sure to include the plugin for the magic
new VueLoaderPlugin(),
new HTMLPlugin(),
// 定义一个环境变量 在这里定义了,在js代码中可以直接使用
new webpack.DefinePlugin({
‘process.env‘:{
NODE_ENV:isDev ?‘"development"‘:‘"production"‘
}
})
],
module:{
rules:[
{
// 指定vue-loader处理 vue文件, 处理 vue文件
test:/.vue$/,
loader:‘vue-loader‘
},
{
//处理 css
test:/.css$/,
// 使用css-loader读取内容,用 style-loader处理css写入到html代码中去
use:[
‘style-loader‘,
‘css-loader‘
]
},
{
// css 预处理文件
test:/.styl/,
use:[
‘style-loader‘,
‘css-loader‘,
‘stylus-loader‘
]
},
{
// 图片处理的 loader
test:/.(gif|jpg|jpeg|png|svg)$/,
use:[
{
// 使用 url-loader(依赖于file-loader)处理 图片资源,options是要给url-loader传递的参数
loader:‘url-loader‘,
options:{
// 如果文件的大小小于1024kb,将将其转换为base64代码,存入html中
limit:1024,
// 输出图片原先的名字
name:‘[name]-rao.[ext]‘
}
}
]
}
]
}
}
// 环境切换的判断
if (isDev){
// webpack打包后的js是转移的(如es6转程es5),在出错后不好定位,需要把转换后的js代码映射,这样我门
// 查看错误的时候,还是我们编写代码样式,便于定位
config.devtool ="#cheap-module-eval-source-map"
// 开发环境配置
config.devServer= {
port:‘8001‘,
// 设置成 0.0.0.0可以通过 localhost,127.0.0.1,本机ip进行访问
host:‘0.0.0.0‘,
//如果有错直接显示在网页上面
overlay:{
errors:true
},
// // 将server不理解的地址,映射首页
// historyFallback:{
// },
//在启动的时候自动打开浏览器
open:true,
// 只渲染当前组件的效果,不会整个项目重新渲染
hot:true
}
config.plugins.push(
// 热加载需要的插件
new webpack.HotModuleReplacementPlugin(),
// 过滤一些不需要的信息
new webpack.NoEmitOnErrorsPlugin()
)
}
module.exports =config
以上是关于webpack-从零搭建vue过程的主要内容,如果未能解决你的问题,请参考以下文章
不使用 vue-cli 与 vue 模版,使用 Vue2.x + webpack4.x 从零开始一步步搭建项目框架
原创从零开始搭建Electron+Vue+Webpack项目框架预加载和Electron自动更新