react学习一 webpack

安装webpack

创建文件

  mkdir react-demo
  cd react-demo
  npm init
  npm i webpack webpack-cli webpack-command --save-dev    //可以用淘宝镜像cnpm

--save-dev与--save的区别
--save-dev表示只是在编译过程中所依赖的包,例如:webpack、sass-loader等 最后在package.json的devDependencies部分显示
--save 表示编译后在运行时还需要依赖的包,例如 react react-dom等 最后在package.json的dependencies部分显示
也可以指定安装webpack的版本

新建index.html

   <!DOCTYPE html>
  <html lang="en">
  <head>
      <meta charset="UTF-8">
      <title>demo</title>
  </head>
  <body>
  <div id="root"></div>
  </body>
  </html>

新建src目录并创建index,js

  console.log('hello webpack')

新建webpack.config.js

  const path = require('path');
  module.exports = { 
       entry: './src/index.js', //制定文件入口
       output: {
          filename: '[name].js', // 输出的文件名    
          path: path.resolve(__dirname, 'dist')   //打包输出到dist文件夹
      },
  };

path 模块提供用于处理文件路径和目录路径的实用工具 __dirname 全局变量 代表当前文件所在文件夹的完整路径

webpack命令

  npm install webpack -g

全局安装webpack
webpack //对项目进行打包
webpack --config XXX.js //使用另一个js启动 默认启动webpack.config.js
webpack --watch // 自动监控文件的改变
webpack --progress //显示进度条
webpack --display-modules //打包时显示隐藏的模块
webpack--display-chunks //打包时显示chunks
webpack --display-error-details //显示详细错误信息
webpack -w #提供watch方法,实时进行打包更新
webpack -p #对打包后的文件进行压缩
webpack -d #提供SourceMaps,方便调试
webpack --colors #输出结果带彩色,比如:会用红色显示耗时较长的步骤
webpack --profile #输出性能数据,可以看到每一步的耗时

webpack的插件

html-webpack-plugin 自动创建html文件

  npm i --save-dev  html-webpack-plugin

clean-webpack-plugin 清除文件

  npm i --save-dev clean-webpack-plugin

编译loader

  npm i --save-dev style-loader css-loader node-sass sass-loader file-loader url-loader

node-sass和sass-loader 是用来编译scss文件
style-loader和css-loader 是用来编译css文件
file-loader url-loader 加载其他文件,比如图片,字体

修改webpack.config.js

  const path = require('path');
  const webpack = require('webpack');
  const HtmlWebpackPlugin = require('html-webpack-plugin');//自动创建html文件
  const CleanWebpackPlugin = require('clean-webpack-plugin');//清除多余文件

  module.exports = {
      devtool: 'cheap-module-eval-source-map',// 用于开发调试,方便清楚是那个文件出错 (共有7种)
      entry: {
          index: './src/index.js'
      },
      output: {
          filename: 'bundle.js', // 输出的文件名
          path: path.resolve(__dirname, 'dist') // 
      },
      module: {
          rules: [{
              test: /\.css$/,
              use:"style-loader!css-loader"
          }, {
              test: /\.scss$/,
              use:["style-loader","css-loader","sass-loader"]
             // 加载时顺序从右向左 
          },
          {
              test: /\.(png|svg|jpg|gif)$/,
              use: ['file-loader']
          }]
      },  
      plugins: [
          new CleanWebpackPlugin(),//每次编译都会把默认dist下的文件清除,新版clean-webpack-plugin 只能接受一个对象  
          new webpack.HotModuleReplacementPlugin(),  //热更新
          new HtmlWebpackPlugin({
              template: 'src/index.html' //使用一个模板
          })
      ]
  };

webpack 服务器 webpack-dev-server

  npm i --save-dev webpack-dev-server
完善webpack.config.js 添加devServer
   devServer: {
        contentBase: './dist',   //目录文件
        hot: true,    //热更新
        inline: true,
        port: 9999   //端口
    },

js编译工具babel

安装

  npm i --save-dev @babel/core @babel/cli @babel/preset-env @babel/preset-react  @babel/plugin-proposal-class-properties
  npm i --save @babel/polyfill
  npm i --save-dev babel-loader

修改webpack.config.js

在 module的rules中加入

  {
        test: /\.(js|jsx)$/,
        loader: 'babel-loader',
        exclude: /node_modules/
    }

添加babel配置文件

在根目录下添加文件 .babelrc

  {
      "presets": [
          "@babel/preset-env",
          "@babel/preset-react"
      ],
     "plugins": [
          "@babel/plugin-proposal-class-properties",
            ]
  }

编写package.json文件

   "scripts": {
    "watch": "webpack --watch",   //打包并监听
    "build": "webpack --mode production",   //打包并制定mode
    "dev": "webpack  --mode development& webpack-dev-server --open  --mode development",  //运行development环境  指定mode为development
    "start": "webpack-dev-server --open --mode production" //指定mode为production
    },

注意:如果你没有在webpack.config.js制定mode 会有一个警告

  warning  The 'mode' option has not been set, webpack will fallback to
            'production' for this value. Set 'mode' option to 'development' or
            'production' to enable defaults for each environment.

意思为没有制定模式

分离文件

在上面loder中我们可以使用scss文件 这个scss文件最终会转化为css样式打包进js文件里 现在我们需要把css文件并分离出来

  npm i --save-dev extract-text-webpack-plugin

修改webpack.config.js

   const path = require('path');
  const webpack = require('webpack');
  const HtmlWebpackPlugin  = require('html-webpack-plugin');
  const CleanWebpackPlugin = require('clean-webpack-plugin');
  const ExtractTextPlugin = require("extract-text-webpack-plugin"); //分离文件
  module.exports = {
      // mode: "development",
      entry: './src/index.js',
      output: {
        filename: '[name].js', // 输出的文件名
        path: path.resolve(__dirname, 'dist')
    },
module: {
    rules: [{
        test: /\.css$/,
        use:ExtractTextPlugin.extract({
            fallback:"style-loader",
            use:"css-loader"
        })
    },{
        test: /\.scss$/,
        loader: ExtractTextPlugin.extract({
            fallback:"style-loader",
            use:"css-loader!sass-loader"
        })
        // 加载时顺序从右向左
    },{
        test: /\.(png|svg|jpg|gif)$/,
        use: ['file-loader']
        },{
            test: /\.(js|jsx)$/,
            loader: 'babel-loader',
            exclude: /node_modules/
        }
    ]
},
devServer: {
    contentBase: './dist',
    hot: true,
    inline: true,
    port: 9999
},
plugins: [
    new CleanWebpackPlugin(),
    new webpack.HotModuleReplacementPlugin(),
    new HtmlWebpackPlugin({
        filename: 'index.html',
        template: 'index.html',
        inject: true  //追加到body下
    }),
  //分离css
    new ExtractTextPlugin({
        filename:  (getPath) => {
            return getPath('css/[name].css').replace('css/js', 'css');
        },
        allChunks: true
    })
]
};

我们运行npm run build 就会发现dist文件夹下会有一个css文件夹 里面存放这main.css

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 webpack介绍和使用 一、webpack介绍 1、由来 ...
    it筱竹阅读 11,623评论 0赞 21
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,732评论 1赞 32
  • 目录第1章 webpack简介 11.1 webpack是什么? 11.2 官网地址 21.3 为什么使用 web...
    lemonzoey阅读 1,877评论 0赞 1
  • http://blog.csdn.net/weizengxun/article/details/53448885 ...
    晓卢轩阅读 762评论 0赞 0
  • (1)先对职业体检,方能对症下药 和老妹聊天,她说了近期的职业状况。最近工作不满意,于是刚考了公务员。接下来准备考...
    蔷小薇薇阅读 438评论 0赞 3

友情链接更多精彩内容