博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
27.用webpack自搭react和vue框架
阅读量:4691 次
发布时间:2019-06-09

本文共 7828 字,大约阅读时间需要 26 分钟。

自己搭建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  开发、生产模式        loader        plugin        devServer ----> 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解析的配置

实例:

image

+  public:1[index.html]    
myapp
app
+ src:1[App.js] import React,{Component} from "react";import img from "./asset/logo.png";const Home = ()=>
Home
export default class App extends Component{ //测试 constructor(...args){ super(...args); this.state={count:100} } plus(){ this.setState({ count:this.state.count+1 }) } render(){ return
{this.state.count}
}}2[index.js]import React from "react";import ReactDOM from "react-dom";import App from "./App";ReactDOM.render(
,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"] }

实例

image

+  [public]1[index.html]    
MyApp
app
+ [src]1[main.js]import Vue from "vue";import App from "./App.vue";new Vue({ render:h=>h(App)}).$mount("#app")2[App.vue]
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

你可能感兴趣的文章
测试思想-集成测试 关于接口测试 Part 2
查看>>
windows下mysql密码忘了怎么办?【转】
查看>>
php生成器使用总结
查看>>
T-SQL中的indexof函数
查看>>
javascript基础之数组(Array)对象
查看>>
mysql DML DDL DCL
查看>>
RAMPS1.4 3d打印控制板接线与测试1
查看>>
python with语句中的变量有作用域吗?
查看>>
24@Servlet_day03
查看>>
初级ant的学习
查看>>
redis数据结构--String
查看>>
POJ 3279 Fliptile (二进制枚举)
查看>>
memcached 细究(三)
查看>>
future
查看>>
关于main函数传参数的问题
查看>>
getTickCount()函数 VS GetTickCount()函数
查看>>
嵌入式jetty
查看>>
2017~回顾分享
查看>>
使用svn——项目的目录布局
查看>>
RSA System.Security.Cryptography.CryptographicException
查看>>