webpack+react+ES6 配置安装

如今webpack已经发布3.0.0版本。近期没事学习webpack react es6 玩玩 在此记录一下学习的过程以及遇到的一些坑,方便日后用的时候直接拿来用、不多介绍 直奔主题。
一、webpack的安装与配置:
   1>使用webpack,首先全局安装node(http://nodejs.cn/)官网下载稳定版4.xx或者6.xx 或者最新版8.xx 之后可在cmd中 键入node -v命令 查看安装版本 以及node自带的npm包管理器。
   2>其次在node的基础上 全局安装webpack cmd键入命令
   ` npm install webpack -g `                       
   ( 默认安装的是webpack最新版本3.0.0 由于新版本有些改变,会有些不稳定,采用的是1.14.0版本的webpack 指定安装版本) 
    `npm install webpack@1.14.0 -g`
   3>新建项目文件 demo目录结构如下:

(https://img-blog.csdn.net/20170707132411950?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG40NzEzOTkyODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast))
如上图所示,是webpack的基本目录结构,紧接着在项目文件下打开git或者cmd安装webpack到本地项目中,存储在项目生产的node_modules中。
npm install webpack@1.14.0 --save-dev
4>初始化项目 npm init 自动生成package.json 一路enter回车 知道出现提问就ok 。

   {
  "name": "web1",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "jquery": "^3.2.1",
    "webpack": "^1.14.0",
    "webpack-dev-server": "^1.16.5",
    "webpack-hot-middleware": "^2.18.1"
  },
  "dependencies": {
    "babel-core": "^6.25.0",
    "babel-loader": "^6.4.1",
    "babel-preset-es2015": "^6.0.15",
    "babel-preset-react": "^6.24.1",
    "css-loader": "^0.25.0",
    "es6-promise": "^4.0.5",
    "exports-loader": "^0.6.4",
    "express": "^4.15.3",
    "extract-text-webpack-plugin": "^1.0.1",
    "jsx-loader": "^0.13.2",
    "less-loader": "^6.0.6",
    "react": "^15.6.1",
    "react-dom": "^15.6.1",
    "react-hot-loader": "^1.3.1",
    "react-router": "^3.0.0",
    "style-loader": "^0.18.2"
  }
}
 
   5>webpack.config.js文件是webpack必备的配置文件 如同gulp中的gulpfile.js文件 。
         以本demo最基本的配置为例子,首先需要引入本地的webpack,通过cmd规范引入 基本配置如下:

     var webpack = require('webpack');//引入webpack
     var ET = require('extract-text-webpack-plugin');//css合并抽离 插件
     module.exports = {
           // 入口
			    entry: [
			        "./src/index.js"
			    ],
		    // 出口
		    output: {
		        path: __dirname + '/app',
		        filename: 'bundle.js'
		    },
    module: {
        loaders: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                loader: 'babel'
            },
            {
                test: /\.css$/,
                loader: ET.extract('style','css')
            },
            {
                test: /\.less$/,
                loader: ET.extract('style', 'css!less')
            },

            {
                test: /\.jsx$/,
                exclude: /node_modules/,
                loader: 'babel'
            }
        ]
    },

plugins: [
    // new webpack.optimize.UglifyJsPlugin(),//js压缩
    new ET('bundle.css', { //样式单独合并
        allChunks: true
    }),
    new webpack.HotModuleReplacementPlugin(),//代码热替换
    new webpack.NoErrorsPlugin()//允许错误不打断程序
]

};
配置中的一些依赖都需要安装 如 extract-text-webpack-plugin、loader css-loader style-loader 、编译base6(babel-core)等等 根据业务需求安装此类依赖 两种方式 全部写在package.json中 一键npm install 或者是依次安装 如npm-install loader 等等
6>基本配置完成后 可以写组件代码 本demo中 入口文件为index.js文件 业务组件是sub.js
入口文件引入(import/require)业务组件 组件暴露接口对象 app文件中手动(或者通过插件自动)新建页面 ,页面引入出口文件 如下

 index.html:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>

</head>
<body>
     <!--<div id="div1"></div>-->
     <div id="app"></div>
</body>
<script src="bundle.js"></script>
</html>

 

入口文件:

/**
 * Created by Administrator on 2017/7/5.
 */

/*document.write(require('./sub.js')) ;*/

import React from 'react';
import ReactDOM from 'react-dom';
import App from './sub';

ReactDOM.render(<App />, document.getElementById('app'));

if (module.hot) {
    module.hot.accept();
}

业务组件文件:

/**
 * Created by Administrator on 2017/7/6.
 */

module.exports = me;*/

import React from 'react';

class App extends React.Component {

    render() {
        return <div>我们的世界 但是  而且我们的问题很难实现了</div>
    }
}

export default App

出口文件:bundle.js 打包后 在页面引入 建议在body后引入 避免获取不到相应的dom元素

二、以上基本webpack的配置情况 下面主要是记录react+es6
利用webpack结合更完美 模块化开发
1>首先需要安装react 以及react-dom 以及编译jsx语法的转译babel等

    npm install react react-dom
    安装 "jsx-loader": "^0.13.2",
        "es6-promise": "^4.0.5",
        "babel-preset-es2015": "^6.0.15",
        "babel-preset-react": "^6.24.1",

2>新建.babelrc文件 预编译解析

    {
   "presets": [ "es2015","react"  ]
}

3>在配置文件中 配置相应的模块编译功能以及热更新(利用express中间件)
module: {
loaders: [
{
test: /.jsKaTeX parse error: Expected 'EOF', got '}' at position 89: …l' }̲, {…/,
loader: ET.extract(‘style’,‘css’)
},
{
test: /.less$/,
loader: ET.extract(‘style’, ‘css!less’)
},

        {
            test: /\.jsx$/,
            exclude: /node_modules/,
            loader: 'babel'
        }
    ]

},

4>es6中通过import引入依赖 注意依赖顺序 react具体语法编写后续再说

三、开发环境中要启动一个本地服务器 新建一个server.js文件
1>server.js文件:

    var express = require('express');
var app = express();
var webpack = require('webpack');
var WebpackDevServer = require('webpack-dev-server');
var config = require('./webpack.config.js');
var webpackCompiled = webpack(config);

var webpackHotMiddleware = require('webpack-hot-middleware');
app.use(webpackHotMiddleware(webpackCompiled))
new WebpackDevServer(webpack(config), {
  contentBase: __dirname + '/app',
  hot: true,
  inline: true

})
.listen(80, 'localhost', function(err, result){
  if (err) {
    console.log(err);
  }
  console.log('Listening at localhost:80');
});

2>安装本地服务依赖(模拟开发环境)

    npm install webpack-dev-server --save-dev
在配置文件中引入 入口文件中添加

3>配置热更新 与浏览器同步 无需刷新浏览器
安装node中ecpress 并引入server.js配置文件

var express = require('express');
var app = express();
var webpack = require('webpack');
var WebpackDevServer = require('webpack-dev-server');
var config = require('./webpack.config.js');
var webpackCompiled = webpack(config);

var webpackHotMiddleware = require('webpack-hot-middleware');
app.use(webpackHotMiddleware(webpackCompiled))

同时在配置文件 webpack.config.js中引入热更新插件

执行webpack命令执行编译 执行npm start 开启服务

四、最后简单总结一下 本文只是自己的学习记录 写的比较粗糙 后续后不断改进 ,陆续的会上传到github 同时欢迎前辈指点纠正错误 ;如有不同的看法留言或者联系邮箱li_ning021466@163.com

还有太多比较深的东西 还没有写 1、 模块化与非模块化 2、base编译 3、plugin插件选项 4、多入口文件打包 等等 希望能够不断提升

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
redux、reactwebpack是目前非常流行的前端技术,它们可以帮助我们快速构建复杂的单页面应用。而热加载是一种非常方便的开发工具,能够在我们修改代码后自动重新编译并刷新页面,极大地提高了开发效率。 然而,IE8是一个老旧的浏览器,在支持新技术的同时也存在很多兼容性问题。要使我们的应用在IE8上运行,我们需要进行一些特殊的处理。 下面是一些可能有用的技巧: 1. 使用babel进行ES6代码转换:redux和react都使用了一些ES6语法,而IE8并不支持这些语法。我们可以使用babel将ES6代码转换为ES5代码,从而在IE8上运行。同时,我们还需要使用babel-polyfill来提供一些ES6新特性的支持。 2. 使用es5-shim来提供一些ES5新特性的支持:IE8对ES5的支持也不完整,我们可以使用es5-shim来提供一些ES5新特性的支持。 3. 使用es6-shim来提供一些ES6新特性的支持:IE8对ES6的支持更加有限,我们可以使用es6-shim来提供一些ES6新特性的支持。 4. 使用webpack的兼容性插件:webpack提供了一些兼容性插件,可以自动处理一些兼容性问题,比如babel-loader、es3ify-webpack-plugin等。 5. 使用react-ie8来提供react在IE8上的支持:react-ie8是一个为react提供在IE8上支持的库,可以很方便地解决一些兼容性问题。 6. 使用redux-ie8来提供redux在IE8上的支持:redux-ie8是一个为redux提供在IE8上支持的库,可以很方便地解决一些兼容性问题。 总之,要使我们的应用在IE8上运行,需要进行一些特殊的处理,包括使用babel进行ES6代码转换、使用es5-shim和es6-shim来提供一些新特性的支持、使用webpack的兼容性插件、使用react-ie8和redux-ie8来提供在IE8上的支持等。这些技巧需要不断地更新和完善,以适应不断变化的前端技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值