当前位置: 首页 > news >正文

react 入门到放弃 之 webpack

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

自己花了几个月时间自学前端、在百度的帮助下迷糊了几个月 幸好还有谷歌

现在把自己学的东西  知识 整理下  

所以  这个不是大神的教程  是同样小白的学习笔记  

希望自己走过的坑可以帮助其他小白别踩  比我少绕弯路

 

1、开始需要的环境

电脑安装了node会基本的npm安装

node教程指向:http://www.imooc.com/learn/348    慕课网node教程  

node的知识很深  我们只需要了解到node的模块与包管理就可以了 想更深入的可以继续钻研下去 node是可以构建服务端的。

 

2、什么是webpack 作用是什么?

js文件的打包 压缩 混淆  还可以通过插件 处理一些less scss es6转换等等工作

给我们提供整套工作方案 写代码更简便舒心 

可以理解为一个工作台、脚手架

 

3、新建react项目

新建目录 目录名称项目名

/根文件夹

|—app
|    |—components    组件目录 里边存放react组件
|    |—images           图片文件目录
|    |—sass               sass文件目录
|    |—main.js            js入口文件
|
|—build
|    |—index.html       应用入口
|
|—dist                     wegpack打包的生产目录
|
|—package.json 
|—webpack.config.js  开发环境配置文件
|—webpack.production.config.js  生产环境配置文件

 

以后会根据内容的提升新增目录 比如redux、router之类的

 

初始化react环境

npm init

cnpm install react-dom --save

cnpm install react --save

 

 

4、webpack安装与配置

 

贴下package.json 需要安装的列表

—————babel处理了es6语法还有将react编译——————

    "babel-core": "^6.9.0",

    "babel-loader": "^6.2.4",

    "babel-preset-es2015": "^6.3.13",

    "babel-preset-react": "^6.3.13",

    "babel-polyfill": "^6.9.1",

    "babel-preset-stage-0": "^6.5.0",

——————react热插拔———————

    "react-hot-loader": "^1.3.0",

——————基本模块—————

    "webpack": "^1.13.1",

    "react": "^15.1.0",

    "react-dom": "^15.1.0",

——————开启web服务———————

    "webpack-dev-server": "^1.14.1”,

———————处理sass css 图片————————

    "css-loader": "^0.23.1",

    "file-loader": "^0.8.5",

    "style-loader": "^0.13.1",

    "url-loader": "^0.5.7",

    "sass-loader": "^3.2.0",

    "node-sass": "^3.7.0"

 

 

package.json 新增:

 "scripts": {

    "build": "webpack",

    "dev": "webpack-dev-server --devtool eval --progress --colors --hot --content-base build"

  }

解释:

  1. webpack-dev-server - 在 localhost:8080 建立一个 Web 服务器
  2. --devtool eval - 为你的代码创建源地址。当有任何报错的时候可以让你更加精确地定位到文件和行号
  3. --progress - 显示合并代码进度
  4. --colors - Yay,命令行中显示颜色!
  5. --content-base build - 指向设置的输出目录

当你运行 npm run dev 的时候,会启动一个 Web 服务器,然后监听文件修改,然后自动重新合并你的代码。真的非常简洁!

 

 

先说下工作 或者开发模式 跟生产模式 有什么不同

其实可以理解为两个webpack的配置文件  文件大部分配置相同

一个是在开发时候开启的  里边配置了工具来帮助开发

一个是开发后打包应用的  所以剔除了开发模式时候提供的工具之类的

这里 webpack.config.js  是默认的配置文件名称  也是开发模式配置文件

webpack.production.config.js  是生产模式配置文件 当然名字可以自己起  在写package.json 命令时候 自己指定名称就行

 

贴下工作模式下 webpack.config.js 配置

var path = require('path');



// var node_modules = path.resolve(__dirname, 'node_modules');

// var pathToReact = path.resolve(node_modules, 'react/dist/react.min.js');

// var pathToReacttow = path.resolve(node_modules, 'react-dom/dist/react-dom.min.js');



var config = {

  entry: [

       /** 文件更新后 浏览器自动刷新*/

      'webpack/hot/dev-server',

      'webpack-dev-server/client?http://localhost:8080',

      /** 打包的入口文件*/

      path.resolve(__dirname, 'app/main.js') 

    ],

    

    // resolve: {

    //     alias: {

    //       'react': pathToReact,

    //       'react-dom': pathToReacttow

    //     }

    // },

    

    /** 打包的出口文件*/

  output: {

    path: path.resolve(__dirname, 'build'),

    filename: 'bundle.js'

  },

  module: {

    loaders: [

          {

                test: /\.jsx?$/,

                loader: 'babel-loader',

                exclude: /node_modules/,

                query: {

                    presets: ['es2015','react']

                }

                

          },

          {

             /** 编译sass文件*/

            test: /\.scss$/,

            loader: 'style!css!sass'

          }, {

            /** 图片如果不大于 25KB 的话要自动转成 BASE64 字符串*/

            test: /\.(png|jpg)$/,

            loader: 'url?limit=25000'

          }

        ]

        // noParse: [pathToReact , pathToReacttow]

  }

};



module.exports = config;

 

 

 

配置生产模式

 

package.json新增

"scripts": {

    "dev": "webpack-dev-server --devtool eval --progress --colors --hot --content-base build",

    "deploy": "NODE_ENV=production webpack -p --config webpack.production.config.js"

  },

 

生产模式webpack.production.config.js配置


 

var path = require('path');

var webpack = require('webpack');

var node_modules_dir = path.resolve(__dirname, 'node_modules');



var config = {



    entry: [

        path.resolve(__dirname, 'app/main.js')

    ],



    /** 打包的出口文件*/

    output: {

        publicPath:'./',

        path: path.resolve(__dirname, 'dist'),

        filename: 'bundle.js'

    },

    module: {

        loaders: [

            {

                test: /\.jsx?$/,

                loader: 'babel-loader',

                exclude: [node_modules_dir],

                query: {

                    presets: ['es2015', 'react']

                }

            },

            {

                /** 编译sass文件*/

                test: /\.scss$/,

                loader: 'style!css!sass'

            }, {

                /** 图片如果不大于 25KB 的话要自动转成 BASE64 字符串*/

                /** loader的&name=img/[name].[ext]  指定了图片要放在img文件夹下*/

                test: /\.(png|jpg)$/,

                loader: 'url?limit=25000&name=img/[name].[ext]'

            }

        ]

        // noParse: [pathToReact , pathToReacttow]

    },

    plugins: [

        new webpack.DefinePlugin({

            "process.env": {

                NODE_ENV: JSON.stringify("production")

            }

        })

    ]



};



module.exports = config;

入口js文件添加 : import "babel-polyfill";  //es6 api

npm run dev 开启开发模式  浏览器 访问 http://localhost:8080

npm run deploy 开启生产 打包文件 文件会打包到dist文件夹下

转载于:https://my.oschina.net/madezhizhang/blog/680594

相关文章:

  • 如何用Beyond Compare对比压缩文件
  • iOS推送通知的实现步骤
  • 异步与并行~大话目录
  • MySQL in不走索引
  • linu系统管理中和shell编程中常用的技巧
  • 云栖社区
  • linux下升级python版本
  • CentOS 7 网络配置
  • Report Server Windows Service (MSSQLSERVER) 无法与报表服务器数据库建立连接 错误ID107...
  • 滴滴算法大赛算法解决过程 - 机器学习
  • 构建之法阅读笔记4
  • 提高PHP网站安全性5个技巧
  • Unity中双击 / 单击事件
  • SSDP
  • Azure Stack POC环境部署1—概述
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • Apache Spark Streaming 使用实例
  • C# 免费离线人脸识别 2.0 Demo
  • Cookie 在前端中的实践
  • eclipse(luna)创建web工程
  • es6要点
  • Git的一些常用操作
  • Go 语言编译器的 //go: 详解
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • JavaScript设计模式与开发实践系列之策略模式
  • JAVA多线程机制解析-volatilesynchronized
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • LeetCode29.两数相除 JavaScript
  • leetcode46 Permutation 排列组合
  • Less 日常用法
  • python学习笔记 - ThreadLocal
  • Spring Cloud Feign的两种使用姿势
  • 初识 webpack
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 每天一个设计模式之命令模式
  • 我的面试准备过程--容器(更新中)
  • 项目管理碎碎念系列之一:干系人管理
  • 小程序开发之路(一)
  • 移动端 h5开发相关内容总结(三)
  • 异步
  • 用jquery写贪吃蛇
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • Prometheus VS InfluxDB
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​TypeScript都不会用,也敢说会前端?
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • (Java)【深基9.例1】选举学生会
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (三)模仿学习-Action数据的模仿
  • (十五)Flask覆写wsgi_app函数实现自定义中间件