react+webpack+redux+react-router环境搭建
第一步,新建一个文件夹,然后 安装 新建以下目录文件,
安装
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>react-weChat</title> </head> <body> <div id="root"></div> </body> </html>
import ReactDOM from 'react-dom'; import React,{Component} from 'react'; class App extends Component { render() { return <div>Hello React !!!</div> } } ReactDOM.render( <App/>,document.getElementById("root") ) 接下来开始配置 const srcDir = __dirname + "/src"; const distDir = __dirname + "/dist"; module.exports = { entry: [ srcDir + "/index.jsx" //入口 ],output: { path: distDir,//打包后的文件存放地方,会自动新建 filename: 'index.[hash:7].js'//打包后输出的文件名,后面跟7位随机hash值 },devtool: 'source-map',devServer: { contentBase: './public',//本地服务器所加载的页面的目录 historyApiFallback: true,//不跳转 inline: true,//实时刷新 port: 8090,//端口号 hot: true },module:{},plugins:[] 再安装解析 module: { rules: [ { test: /(.jsx|.js)$/,use: { loader: "babel-loader",options: { presets: [ 'env','react' ] } },exclude: /node_modules/ },//.babelrc { "presets": [ "react","env" ],"env": { "development": { "plugins": [ [ "react-transform",{ "transforms": [ { "transform": "react-transform-hmr","imports": [ "react" ],"locals": [ "module" ] } ] } ] ] } } }
const HtmlWebpackPlugin = require("html-webpack-plugin");//生成新的html文件 plugins: [ new HtmlWebpackPlugin({//根据模板引入css,js最终生成的html文件 filename: 'index.html',//生成文件存放路径 template: './public/index.html',//html模板路径 }),
const ExtractTextPlugin = require('extract-text-webpack-plugin');//分离css和js const CleanWebpackPlugin = require('clean-webpack-plugin');//清缓存 new ExtractTextPlugin('style.css'),//独立导出css new CleanWebpackPlugin('dist/*.*',{ root: __dirname,verbose: true,dry: false })
{ test: /.css$/,use: [ { loader: "style-loader" //在html中插入<style>标签 },{ loader: "css-loader",//获取引用资源,如@import,url() options: { modules: true,//启用css modules localIdentName: '[name__[local]--[hash:base64:5]]'//指定css的类名格式,避免全局污染 } },{ loader: "postcss-loader",options: { plugins:[ require('autoprefixer')({ browsers:['last 5 version'] }) ] } } ] },
{ test:/.less$/,use: [ { loader: "style-loader" },options: { importLoaders:2 } },//自动加前缀 options: { plugins:[ require('autoprefixer')({ browsers:['last 5 version'] }) ] } },{ loader: "less-loader" } ] },{ test:/.scss$/,use:[ { loader: "style-loader" },{ loader: "css-loader",options: { importLoader:1,} },{ loader: "sass-loader" },{ loader: "postcss-loader",options: { plugins:[ require('autoprefixer')({ browsers:['last 5 version'] }) ] } } ] },
{ test: /.(png|jpg|gif|woff|svg|eot|woff2|tff)$/,use: 'url-loader?limit=8129',//注意后面那个limit的参数,当你图片大小小于这个限制的时候,会自动启用base64编码图片 exclude: /node_modules/ } 再加一些 const webpack = require("webpack"); new webpack.HotModuleReplacementPlugin(),//热加载插件 new webpack.optimize.OccurrenceOrderPlugin(),new webpack.optimize.UglifyJsPlugin(),//压缩 //package.json "scripts": { "start": "webpack-dev-server --progress","build": "webpack --config ./webpack.production.config.js --progress && babel dist --out-dir dist" }, 完整版代码请参考: devServer: { contentBase: './public',//本地服务器所加载的页面的目录 historyApiFallback: true,//不跳转 inline: true,//实时刷新 port: 8090,//端口号 hot: true,proxy:{ '/api1':{ target:'http://10.7.10 107:8001',changeOrigin:true,pathRewrite:{'^/api':''} },'/api2':{ target:'http://10.7.10.138:4000',pathRewrite:{'^/api2':''} } }, (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |