序言:通过这个小例子你也许、大概、可能会掌握以下几点

1、webstorm如何使用命令行

2、如何使用webpack的loaders把json格式的文件转化为javascript文件

3、如何使用不同的loaders把es6转换为浏览器可以识别的javascript文件

4、对于react而言如何使用合适的loaders把react的JSX文件转换为javascript文件

5、webpack的服务器启动后如何自动监听改动的文件以及浏览器如何自动刷新。

准备:安装好webstorm和nodejs

6、其他更加详细参考:这里

一、开始:

1、新建一个demo04文件夹为项目根目录,下面2个子文件夹分别是src和public

a:public目录下一个index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>webstorm+react+webpack</title>
  6. </head>
  7. <body>
  8. <div id="app"></div>
  9. <script src="bundle.js"></script>
  10. </body>
  11. </html>

b:src目录下有

message.json代码是:

  1. {
  2. "name":"Life",
  3. "do":"is a",
  4. "what":"gradient"
  5. }

createdom.js是为了获取message.json的信息并创建dom,算是一个模块,代码如下

  1. /**
  2. * Created by Administrator on 2016/11/12.
  3. */
  4. var message=require('./message.json');
  5. module.exports = function() {
  6. var greet=document.createElement('h1');
  7. greet.innerHTML="<span>"+message.name+"</span>"+"<span>"+message.do+"</span>"+"<span>"+message.what+"</span>";
  8. return greet;
  9. };

entry.js是webpack的入口文件:

  1. /**
  2. * Created by Administrator on 2016/11/12.
  3. */
  4. require('./style.css');
  5. var createdom = require('./createdom.js');
  6. document.getElementById('app').appendChild(createdom());

style.css代码如下

  1. body {
  2. min-height: 100%;
  3. overflow: hidden;
  4. background-color: #fff;
  5. /*background: rgba(37,38,33,.8);*/
  6. font-family: Arial;
  7. }
  8. h1 {
  9. font-family: arial;
  10. display: inline-block;
  11. margin: 0 auto;
  12. font-weight:;
  13. text-transform: uppercase;
  14. text-align: center;
  15. font-size: 9vw;
  16. line-height: 120%;
  17. padding: 300px 0;
  18. -webkit-animation: background 20s linear infinite;
  19. animation: background 20s linear infinite;
  20. background: -webkit-linear-gradient(0deg, rgba(150,48,30,1) 0%,rgba(199,201,88,1) 10%,rgba(28,147,46,1) 20%,rgba(74,165,168,1) 30%,rgba(89,90,165,1) 40%,rgba(84,16,67,1) 50%,rgba(28,58,63,1) 60%,rgba(82,175,183,1) 70%,rgba(78,170,76,1) 80%,rgba(150,48,30,1) 90%,rgba(199,201,88,1) 100%);
  21. background: linear-gradient(90deg, rgba(150,48,30,1) 0%,rgba(199,201,88,1) 10%,rgba(28,147,46,1) 20%,rgba(74,165,168,1) 30%,rgba(89,90,165,1) 40%,rgba(84,16,67,1) 50%,rgba(28,58,63,1) 60%,rgba(82,175,183,1) 70%,rgba(78,170,76,1) 80%,rgba(150,48,30,1) 90%,rgba(199,201,88,1) 100%);
  22. background-size: 1000% 100%;
  23. -webkit-background-clip: text;
  24. -webkit-text-fill-color: transparent;
  25. position: absolute;
  26. top: 50%;
  27. left: 50%;
  28. -webkit-transform: translate(-50%, -50%);
  29. transform: translate(-50%, -50%);
  30. }
  31. span {
  32. display: block;
  33. }
  34. span:nth-child(1) {
  35. font-size: 214%;
  36. line-height: 85%;
  37. text-indent: -0.33em;
  38. }
  39. span:nth-child(2) {
  40. font-size: 292%;
  41. line-height: 69%;
  42. word-spacing: -0.2em;
  43. text-indent: -0.07em;
  44. }
  45. @-webkit-keyframes background {
  46. 0%{background-position:0% 50%}
  47. 100%{background-position:100% 50%}
  48. }
  49. @keyframes background {
  50. 0%{background-position:0% 50%}
  51. 100%{background-position:100% 50%}
  52. }

(注:html内引入的bundle.js是webpack最终编译后自动生成的文件,暂时不必理会)

2、点击webstorm左下角的 Terminal 按钮弹出内置命令行,进入demo04根目录,如下图

输入:cnpm int快速建立:package.json文件,该文件是描述项目的详细信息。

3、分别几个依赖包(上一篇提到过css-loader和style-loader)。

在已经完成:cnpm install webpack -g之后继续下面

a:cnpm install --save-dev webpack

b:cnpm install --save-dev css-loader

c:cnpm install --save-dev style-loader

d:cnpm install --save-dev json-loader

json-loader是webpack把json文件编译成javascript

e:cnpm install --save-dev webpack-dev-server

安装webpack本地服务器依赖包,只要结合webpack.config.js配置好,你的浏览器会监测你的代码修改并且自动刷新!

下面就来创建这个配置文件~~

4、在demo04根目录创建webpack.config.js文件(webpack的默认的配置文件),并输入如下代码:

  1. /**
  2. * Created by Administrator on 2016/11/12
  3. */
  4. var webpack = require('webpack');
  5. module.exports = {
  6. //2、进出口文件配置
  7. entry:__dirname+'/src/entry.js',//指定的入口文件,“__dirname”是node.js中的一个全局变量,它指向当前执行脚本所在的目录
  8. output: {//输出
  9. path: __dirname+'/public',//输出路径
  10. filename: 'bundle.js'//输出文件名
  11. },
  12. module: {//在配置文件里添加JSON loader
  13. loaders: [
  14. {
  15. test: /\.json$/,
  16. loader: "json"
  17. },
  18. {//3、CSS-loader
  19. test:/\.css$/,
  20. loader:'style!css'//添加对样式表的处理
  21. }
  22.  
  23. ]
  24. },
  25. //4、服务器依赖包配置
  26. devServer: {
  27. contentBase: "./public",//本地服务器所加载的页面所在的目录
  28. colors: true,//终端中输出结果为彩色
  29. historyApiFallback: true,//不跳转
  30. inline: true//实时刷新
  31. }
  32. }

5、如何启动本地服务器?此时你的目录结构应该是

继续点击Terminal进入demo04目录输入:webpack

再执行:webpack-dev-server启动服务器

打开http://localhost:8080/。此时代码变动webpack会自动编译。浏览器会自动刷新,是不是有点神奇~

怎么到现在没提到react?别急,我们继续往下(http://localhost:8080/能正常打开没有出错的情况下)

二、继续上面的例子,这次用react和react-dom、babel,要先安装react和react-dom

demo04根目录执行

a:cnpm install --save react

b:cnpm install --save react-dom

Babel其实是一个编译JavaScript的平台,他可以帮你完成以下两点:

1):把下一代的javascript标准(es6/7)编译为当前浏览器完全支持的javascript

2):使用基于JavaScript进行了拓展的语言,比如React的JSX

Babel其实是几个模块化的包,其核心功能位于称为babel-core的npm包中,不过webpack把它们整合在一起使用,但是对于每一个你需要的功能或拓展,你都需要安装单独的包(用得最多的是解析Es6的babel-preset-es2015包和解析JSX的babel-preset-react包)。

继续安装:

c:cnpm install --save-dev babel-core

d:cnpm install --save-dev babel-loader

e:cnpm install --save-dev babel-preset-es2015

f:cnpm install --save-dev babel-preset-react

1、更新webpack.config.js代码如下

  1. /**
  2. * Created by Administrator on 2016/11/12
  3. */
  4. var webpack = require('webpack');
  5. module.exports = {
  6. //2、进出口文件配置
  7. entry:__dirname+'/src/entry.js',//指定的入口文件,“__dirname”是node.js中的一个全局变量,它指向当前执行脚本所在的目录
  8. output: {//输出
  9. path: __dirname+'/public',//输出路径
  10. filename: 'bundle.js'//输出文件名
  11. },
  12. module: {//在配置文件里添加JSON loader
  13. loaders: [
  14. {
  15. test: /\.json$/,
  16. loader: "json"
  17. },
  18. {//5、编译es6配置
  19. test:/\.js$/,
  20. exclude:/node_modules/,
  21. loader:'babel',//在webpack的module部分的loaders里进行配置即可
  22. query:{
  23. presets:['es2015','react']
  24. }
  25. },
  26. {//3、CSS-loader
  27. test:/\.css$/,
  28. loader:'style!css'//添加对样式表的处理
  29. }
  30.  
  31. ]
  32. },
  33. //4、服务器依赖包配置
  34. devServer: {
  35. contentBase: "./public",//本地服务器所加载的页面所在的目录
  36. colors: true,//终端中输出结果为彩色
  37. historyApiFallback: true,//不跳转
  38. inline: true//实时刷新
  39. }
  40. }

现在你的webpack的配置已经允许你使用ES6以及JSX的语法了

2、使用es6更新createdom.js,返回一个react组件

  1. /**
  2. * Created by Administrator on 2016/11/12.
  3. */
  4. //var message=require('./message.json');
  5. //module.exports = function() {
  6. // var greet=document.createElement('h1');
  7. // greet.innerHTML="<span>"+message.name+"</span>"+"<span>"+message.do+"</span>"+"<span>"+message.what+"</span>";
  8. // return greet;
  9. //};
  10.  
  11. //5、--------编译es6配置后跟新greeter.js如下--------------
  12. import React,{Component} from 'react';
  13. import config from './message.json';
  14. class Greeter extends Component{
  15. render(){
  16. return(
  17. <div>
  18. <h1>
  19. <span>{config.name}</span>
  20. <span>{config.do}</span>
  21. <span>{config.what}</span>
  22. </h1>
  23. </div>
  24. );
  25. }
  26. }
  27. export default Greeter

3、同样更新入口文件entry.js,使用react定义和渲染上面的模块

  1. /**
  2. * Created by Administrator on 2016/11/12.
  3. */
  4.  
  5. //require('./style.css');
  6. //var createdom=require('./createdom.js');
  7. //document.getElementById('app').appendChild(createdom());
  8.  
  9. //5、编译es6配置后跟新main.js如下
  10. import React from 'react';
  11. import {render} from 'react-dom';
  12. import Greeter from './createdom';
  13. import './style.css';
  14. render(<Greeter />,document.getElementById('app'));

执行:webpack 同样会在public下面创建一个bundle.js文件

执行:webpack-dev-server启动服务器,打开http://localhost:8080/如下

简单描述了如何使用webstorm和react以及webpack的一些简单配置。

最终如果在产品阶段的话,可能还需要对打包的文件进行额外的处理,比如说优化,压缩,缓存以及分离CSS和JS等等....。

 

webstorm+react+webpack-demo的更多相关文章

  1. scss + react + webpack + es6

    scss + react + webpack + es6 写在前面: 刚学习完慕课网里的一个幻灯片案例,自己加了刚学的react,两者结合.首先让大家看看效果 点击此处 你可以先用纯js实现上面的效果 ...

  2. 从DOM操作看Vue&React的前端组件化,顺带补齐React的demo

    前言 接上文:谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo 上次写完博客后,有朋友反应第一内容有点深,看着迷迷糊糊:第二是感觉没什么使用场景,太过业务化,还不如直接写Vue ...

  3. 部署React+webpack工程的步骤

    # 部署React+webpack工程的步骤ps:以Mac os系统做开发环境.因为npm现在使用灰常的慢,所以我使用淘宝境像cnpm. 1,准备工作: 先确保存已经安装了node.js: 2,文件部 ...

  4. react +webpack 配置px2rem

    项目背景需要适配ipad 以及手机端,这时候当然要告别刀耕火种时代啦(自己算rem),因为已经有成熟的工具啦,即px2rem(https://www.npmjs.com/package/px2rem) ...

  5. 真刀实战地搭建React+Webpack+Express搭建一个简易聊天室

    一.前面bb两句 因为自惭(自残)webpack配置还不够熟悉,想折腾着做一个小实例熟悉.想着七夕快到了,做一个聊天室自己和自己聊天吧哈哈.好了,可以停止bb了,说一下干货. 二. 这个项目能学到啥? ...

  6. NodeJS + React + Webpack + Echarts

    最近画了个简单的前端图,使用百度的echarts,基于原来项目的NodeJS+React+Webpack框架.在此记录一下: 1.  在react里封装echarts组件,并调用后端API. (参考的 ...

  7. react+webpack+babel环境搭建

    [react+webpack+babel环境搭建] 1.react官方文档推荐使用 babel-preset-react.babel-preset-es2015 两个perset. Babel官方文档 ...

  8. 如何在react&webpack中引入图片?

    在react&webpack项目中需要引入图片,但是webpack使用的模块化的思想,如果不进行任何配置,而直接在jsx或者是css中使用相对路径来使用就会出现问题,在webpack中提供了u ...

  9. react+webpack 引入字体图标

    在使用react+webpack 构建项目过程中免不了要用到字体图标,在引入过程中报错,不能识别字体图标文件中的@符,报错 Uncaught Error: Module parse failed: U ...

随机推荐

  1. angularjs指令参数transclude

    angularjs指令参数transclude transclude翻译为嵌入,和之前看到的vue中的slots作用差不多,目的是将指令元素的子内容嵌入到指令的模板中 定义指令 <div sid ...

  2. Leetcode-190 Reverse Bits

    #190. Reverse Bits Reverse bits of a given 32 bits unsigned integer. For example, given input 432615 ...

  3. c++头文件 #include<iostream>

    cout<<"C1="<<setiosflags(ios::fixed)<<setprecision(2)<<3.14*r*2< ...

  4. SVM算法

    本文主要介绍支持向量机理论推导及其工程应用. 1 基本介绍 支持向量机算法是一个有效的分类算法,可用于分类.回归等任务,在传统的机器学习任务中,通过人工构造.选择特征,然后使用支持向量机作为训练器,可 ...

  5. Android搜索框效果

    转载:http://blog.csdn.net/walker02/article/details/7917392 需求:项目中的有关搜索的地方,加上清空文字的功能,目的是为了增加用户体验,使用户删除文 ...

  6. Java 8新特性-3 Lambda 表达式

    在 Java 8 之前,匿名内部类,监听器和事件处理器的使用都显得很冗长,代码可读性很差. 在Java 8 之前使用匿名内部类: 例如 interface ITestPrint{ public voi ...

  7. 教你如何塑造JavaScript牛逼形象

    如何写JavaScript才能逼格更高呢?怎样才能组织JavaScript才能让别人一眼看出你不简单呢?是否很期待别人在看完你的代码之后感叹一句“原来还可以这样写”呢?下面列出一些在JavaScrip ...

  8. 精彩 .NET 2015

    英文原文:Understanding .NET 2015 Understanding 翻译为了解或理解,对于 .NET 来说,2015 年注定会更加精彩,所以标题就用了"精彩"这个 ...

  9. iOS 如何在整个屏幕中都能实现滑动返回的效果

    - (void)setupGetsInNav { UIGestureRecognizer *gesture = self.interactivePopGestureRecognizer; gestur ...

  10. PHP类的原理

    一.类的实现 类的内部存储结构: struct _zend_class_entry { char type; // 类型:ZEND_INTERNAL_CLASS / ZEND_USER_CLASS c ...