自己搭建react-app vue-cli

前置条件

cnpm i -D webpack webpack-cli webpack-dev-server

cnpm i -D css-loader style-loader url-loader file-loader

cnpm i -D html-webpack-plugin clean-webpack-plugin

webpack.config.js

webpack <==> webpack --config webpack.config.js

webpack --config vue.config.js

组成:
{mode  开发、生产模式loaderplugindevServer ----> webpack-dev-server
}

react

cnpm i -S react react-dom

cnpm i -D babel-loader babel-core babel-preset-env babel-preset-react

预设:.babelrc { "presets": ["env", "react"] }

.babelrc:ES6解析的配置

实例:

+  public:1[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>myapp</title>
</head>
<body><div id="app">app</div>
</body>
</html>+  src:1[App.js]
import React,{Component} from "react";
import img from "./asset/logo.png";const Home = ()=> <div>Home</div>export default class App extends Component{//测试constructor(...args){super(...args);this.state={count:100}}plus(){this.setState({count:this.state.count+1})}render(){return <div><Home />{this.state.count}<input onClick={this.plus.bind(this)} type="button" value="按钮"/><img src={img} /></div>}
}2[index.js]import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
ReactDOM.render(<App/>,document.getElementById("app"));+  [.babelrc]  ES6解析的配置
{ "presets": ["env", "react"] }+  webpack.config.js 配置文件
const path = require("path");
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');module.exports ={mode:"development",entry:"./src/index.js",output:{path: path.resolve(__dirname, "./dist"),filename: "app.bundle.js"},devServer:{port:9000,open:true,},plugins: [new CleanWebpackPlugin(['./dist']),new HtmlWebpackPlugin({template:'./public/index.html',filename: 'index.html'})],module:{rules:[{test: /\.css$/, use: ['style-loader','css-loader']},{test: /\.js$/,exclude: /(node_modules|bower_components)/,//排除use: 'babel-loader'},{test: /\.(png|jpg|gif)$/i,use: [{loader: 'url-loader',options: {limit: 8192}}]},]}
}+  [package.json] 工程文件{"name": "react","version": "1.0.0","description": "","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","serve": "webpack-dev-server"},"keywords": [],"author": "","license": "ISC","devDependencies": {"babel-core": "^6.26.3","babel-loader": "^7.1.5","babel-preset-env": "^1.7.0","babel-preset-react": "^6.24.1","clean-webpack-plugin": "^0.1.19","css-loader": "^1.0.0","file-loader": "^1.1.11","html-webpack-plugin": "^3.2.0","style-loader": "^0.22.1","url-loader": "^1.1.0","webpack": "^4.16.5","webpack-cli": "^3.1.0","webpack-dev-server": "^3.1.5"},"dependencies": {"react": "^16.4.2","react-dom": "^16.4.2"}
}

vue

cnpm i -S vue

cnpm i -D babel-loader babel-core babel-preset-env
cnpm i -D vue-loader vue-template-compiler

预设:.babelrc { "presets": ["env"] }

实例

+  [public]1[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>MyApp</title>
</head>
<body><div id="app">app</div>
</body>
</html>+  [src]1[main.js]
import Vue from "vue";
import App from "./App.vue";new Vue({render:h=>h(App)
}).$mount("#app")2[App.vue]
<template><div id="app">{{msg}}</div>
</template>
<script>
export default{name:"App",data(){return {msg:"MyVue App"}}
} </script>
<style>
#app{color:red;}
</style>3[asset]=>logo.png+  [.babelrc]
{ "presets": ["env"] }+  [package.json]{"name": "vue","version": "1.0.0","description": "","main": "vue.config.js","scripts": {"test": "cross-env NODE_ENV=development   webpack --config test.js","serve": "cross-env NODE_ENV=development  webpack-dev-server  --progress --config vue.config.js","serve2": "webpack-dev-server --config vue.config.js","dev": "webpack --config vue.config.js","build": "set NODE_ENV=development && webpack --config vue.config.js","build2": "set NODE_ENV=production && webpack --config vue.config.js"},"keywords": [],"author": "","license": "ISC","devDependencies": {"babel-core": "^6.26.3","babel-loader": "^7.1.5","babel-preset-env": "^1.7.0","clean-webpack-plugin": "^0.1.19","cross-env": "^5.2.0","css-loader": "^1.0.0","file-loader": "^1.1.11","html-webpack-plugin": "^3.2.0","style-loader": "^0.22.1","uglifyjs-webpack-plugin": "^1.3.0","url-loader": "^1.1.0","vue-loader": "^15.3.0","vue-template-compiler": "^2.5.17","webpack": "^4.16.5","webpack-cli": "^3.1.0","webpack-dev-server": "^3.1.5"},"dependencies": {"vue": "^2.5.17"}
}+  [vue.config.js]const path = require("path");
const webpack = require("webpack");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const CleanWebpackPlugin = require("clean-webpack-plugin");
const VueLoaderPlugin = require("vue-loader/lib/plugin");
//const UglifyJsPlugin = require('uglifyjs-webpack-plugin')console.log("====================================");
console.log("process.env:",process.env.NODE_ENV);
console.log("====================================");process.env.NODE_ENV = process.env.NODE_ENV||"production";
const isDev = process.env.NODE_ENV == "development"?true:false;
const mode = isDev?"development":"production";
function resolve (dir) {return path.join(__dirname,dir)
}
module.exports={mode,//mode:"production",entry:"./src/main.js",output: {path: path.resolve(__dirname, "./dist"),filename: "main.bundle.js"},resolve:{extensions: ['.js', '.vue', '.json',".css"],alias: {'vue$': 'vue/dist/vue.esm.js','@': resolve('src'),}},devServer:{port:9000,open:true,},plugins:[//new UglifyJsPlugin(),new webpack.DefinePlugin({'process.env': {//NODE_ENV: JSON.stringify(process.env.NODE_ENV)NODE_ENV: JSON.stringify(mode)}}),new CleanWebpackPlugin(['./dist']),new HtmlWebpackPlugin({template:'./public/index.html',filename: 'index.html'}),new VueLoaderPlugin()],module:{rules:[{ test: /\.vue$/, loader: 'vue-loader' },{ test: /\.css$/, use: ['style-loader','css-loader'] },{test: /\.js$/,exclude: /(node_modules|bower_components)/,//排除use: 'babel-loader'},{test: /\.(png|jpg|gif)$/i,use: [{loader: 'url-loader',options: {limit: 8192}}]},]}}

cnpm i -D cross-env 兼容环境变量

DefinePlugin mode设置开发者还是生产版本

mode:production 会自动压缩代码

自己手动压缩代码:
mode:development
cnpm i -D uglifyjs-webpack-plugin

vue项目目录作用1. build文件夹:打包配置的文件夹1.1  webpack.base.conf.js :打包的核心配置1.2  build.js:构建生产版本,项目开发完成之后,通过build.js打包(加载base与prod,读取完之后通过webjpack命令对项目进行打包)1.3  webpack.prod.conf.js:被build.js调用,webpack生产包的一个配置。基础代码都在1.1里面写,1.3是对1.1的扩展与补充1.4  dev-client.js:热更新的插件,进行对客户端进行重载1.5  dev-server.js:服务器。(背后的原理是启动一个express框架,这是一个基于node做的一个后端框架,后端框架可以在前端起一个服务)1.6  vue-loader.conf.js:被base加载,1.7  utils.js:工具类,公共的配置
2. config文件夹:打包的配置,webpack对应的配置2.1 index.js:可与1.1合并成一个文件,但由于spa想做一个清晰的架构,因此把它们拆分开了
3. src文件夹:开发项目的源码
4. App.vue : 入口组件
5. static文件夹:静态资源,图片
6. .babelrc:ES6解析的配置
7. .gitignore:忽略某个或一组文件git提交的一个配置
8. index.html:单页面的入口,通过webpack的打包构建之后,会对src源码进行编译,最终把它们插入到html里面来
9. package.json:基础配置,告诉我们项目的信息(版本号、项目姓名、依赖)
10. node_modulues:项目的安装依赖

转载于:https://www.cnblogs.com/zhongchao666/p/9491463.html

27.用webpack自搭react和vue框架相关推荐

  1. 【面试题】当面试官让我回答React和Vue框架的区别......

    Vue 和 React 作为当前前端两大火热的框架,面试的时候自然不少被提及: 请说一下你对react/vue框架的理解 请对比一下两大框架的优缺点 其实react和vue大体上是相同的,比如都使用虚 ...

  2. React 与 Vue 框架的设计思路大 PK

    大家好,我是若川.今天分享一篇框架设计思路的好文. 关于我 大家好我是花果山的大圣,今天很荣幸,有机会跟大家分享一下很多年轻人感兴趣的话题< Vue 和 React 设计思想 PK>,个人 ...

  3. vue jsx webpack报错_从零开始,使用webpack高效搭建react工作流

    关注后,回复"1"获取文章案例源代码. 很多人想搭建一套属于自己的前端工作流:最开始的时候,我们的工作流萌芽是从写一个项目的时候,拷贝以前写过的一个项目文件夹改完直接使用开始的,后 ...

  4. react构建淘票票webapp,及react与vue的简单比较。

    前言 前段时间使用vue2.0构建了淘票票页面,并写了一篇相关文章vue2.0构建淘票票webapp,得到了很多童鞋的支持,因此这些天又使用react重构了下这个项目,目的无他,只为了学习和共同进步! ...

  5. 今天的考核题目: 你知道React和Vue的区别吗? skr,skr

    React 和 Vue 的区别 博主面了几家公司,看简历上写着使用Vue.js框架,就会问,你能说一说 vue 和 react的区别吗 ?react 听过,没用过,所以就只能尴尬的说不怎么了解reac ...

  6. 前端学习(1841):前端面试题之react和vue区别

    相同点 都有组件化开发和Virtual DOM 都支持props进行父子组件间数据通信 都支持数据驱动视图, 不直接操作真实DOM, 更新状态数据界面就自动更新 都支持服务器端渲染 都有支持nativ ...

  7. vue:无法将“vue”识别为脚本_「前端架构」React和Vue -CTO的选择正确框架的指南...

    快速总结:为项目选择正确的javascript框架或库是CTO和项目经理的基本任务.然而,选择的范围很大程度上取决于几个因素,如项目时间.学习曲线.框架性能和团队规模.这篇文章旨在指导他们选择正确的j ...

  8. 2021 年 Angular vs. React vs. Vue 前端框架对比

    2021 年 Angular vs. React vs. Vue 前端框架对比 一个是 UI 库(React),另一个是成熟的前端框架(Angular),而其中最年轻的(Vue)则可以称之为渐进式框架 ...

  9. 【前端前沿看点】React和Vue深度对比

    关于react和vue的对比已经很久了,本人一直是react的重度使用者,为了对比vue和react的使用感受,特意了解相关知识,并且搭建了一些简单的demo以做对比,最终整理成文. 至于angula ...

  10. 「前端架构」React和Vue -CTO的选择正确框架的指南

    快速总结:为项目选择正确的javascript框架或库是CTO和项目经理的基本任务.然而,选择的范围很大程度上取决于几个因素,如项目时间.学习曲线.框架性能和团队规模.这篇文章旨在指导他们选择正确的j ...

最新文章

  1. Struts 2常见应用
  2. java github_GitHub Research:超过50%的Java记录语句写错了
  3. Understanding glibc malloc - ptmalloc
  4. ASP.NET站点构建之减少不必要的请求
  5. java和c语言的区别_都说C语言不会过时,但你是否还需要掌握其他语言?
  6. Python 表白?别傻了,女神是拿来撩的!
  7. gson和json-lib的区别
  8. 括号表示法字符串构造二叉树_一篇文章学会二叉树和二叉查找树
  9. vue-cli3项目运行时一直发http://localhost:8080/sockjs-node/info?t=1462183700002请求
  10. 百度地图坐标和高德地图坐标转换
  11. python水仙花数_python求解水仙花数的方法
  12. 60度斜坡怎么计算_坡度计算公式图解
  13. rpcbind服务没法开启问题
  14. Sql Server 2005 64位安装包
  15. Elasticsearch:IP 数据类型及其搜索
  16. 运行剑灵与服务器断开,剑灵手游程序错误 和服务器断开解决方法
  17. matlab 如何读取二进制、十六进制txt文档
  18. android generated java files,Android protobuf-javalite 实践
  19. windows 任务管理器_如何在Windows 10的任务管理器中查看电源使用情况
  20. 啥是数据处理能力?(二)数据处理工具

热门文章

  1. 关于哈希表,你该了解这些!
  2. 3D渲染和动画制作KeyShot Pro for mac
  3. 想要轻松制作GIF图片,来看篇超全面的分析!
  4. 如何阻止事件冒泡和默认事件
  5. JavaScript学习(十四)---String对象中的模式匹配方法
  6. 全局角度出发讨论敏捷
  7. 不一样的Office 365之 —— 使用Delve查看热门文档
  8. 《嵌入式设备驱动开发精解》——1.1 本书内容的组织
  9. 安卓开发中,什么样的功能适合抽取成 Library?
  10. Centos5.8升级SSH到5.8p2