使用webpack從零開始搭建react項目

webpack中文文檔css

yarn語法

webpack的安裝

webpack的安裝

yarn add webpack@3.10.1 --dev

須要處理的文件類型

文件類型

webpack經常使用模塊

webpack經常使用模塊

webpack-dev-server

webpack-dev-server

yarn add webpack-dev-server@2.9.7 --dev

webpack用法

建立webpack.config.js文件html

const path = require('path');

module.exports = {
    entry: './src/app.js', //入口文件
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'app.js'
    }
};

執行命令node

node_module/.bin/webpack
打包html的配置

htmlWebpackPluginreact

// 安裝html-webpakc-plugin
yarn add html-webpack-plugin --dev

自定義html模版(title,mate等信息)webpack

配置連接git

// webpack.config.js文件
plugins: [
    new HtmlWebpackPlugin({
        template: './src/index.html'
    })
]
安裝babel

參考連接github

// 安裝
// 多個插件之間空格分隔
yarn add babel-core@6.26.0 babel-present-env@1.6.1 babel-loader@7.1.2 --dev

// webpack.config.js配置
module: {
  rules: [
    {
      test: /\.js$/,
      exclude: /(node_modules|bower_components)/,
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['@babel/preset-env'],
          plugins: [require('@babel/plugin-transform-object-rest-spread')]
        }
      }
    }
  ]
}
安裝處理React的插件

babel-preset-reactweb

//babel-preset-react
yarn add babel-preset-react@6.24.1 --dev
如額使用React
// 安裝react react-dom
yarn add react react-dom
加載CSS

style-loadercss-loaderjson

module:{
    rules: [
        {
            test: /\.css$/,
            use: [
                'style-loader',
                'css-loader'
            ]
        }
    ]
}
將文件提取出來

ExtractTextWebpackPlugin後端

ExtractTextWebpackPlugin: 將包或包中的文本提取到單獨的文件中。

配置

const ExtractTextPlugin = require('extract-text-webpack-plugin');
module:{
    rules: [
        {
            test: /\.css$/,
            use: ExtractTextPlugin.extract({
                  fallback: "style-loader",
                  use: "css-loader"
            })
        }
    ]
},
plugins: [
    new ExtractTextPlugin("styles.css"),
]
處理sass

sass-loader, sass-loader依賴node-sasswebpack

yarn add sass-loader node-sass
圖片資源處理

file-loaderurl-loader處理圖片資源,url-loader依賴file-loader

// 安裝
yarn add url-loader file-loader --dev

// 配置

module: {
    rules: [
        {
            test: /\.(png|jpg|gif)$/,
            use: [
                {
                    loader: 'url-loader',
                    options: {
                        limit: 8192
                    }
                }
            ]
        }
    ]
}
font-awesome
yarn add font-awesome

// jsx中引入css
import 'font-awesome/css/font-awesome.min.css';
CommonsChunkPlugin
new webpack.optimize.CommonsChunkPlugin({
    name: 'common',
    filename: 'js/base.js'
})

webpack-dev-server

// 安裝
yarn webpack-dev-server@2.9.7

// webpack.config.js中 配置

devServer: {
    contentBase: './dist'
    port: 8086
}

// 更改啓動方式 package.json
"scripts": {
    "dev" : "node_modulse/.bin/webpack-dev-server",
    "dist": "node_modules/.bin/webpack -p" //添加-p爲線上打包
}
resolve

object

配置模塊如何解析,例如,擋在ES2015中調用import "loadsh", resolve選項可以對webpack查找"lodash"的方式去作修改。

resolve.alias

object

建立importrequire的別名,來確保模塊引入變得更簡單,例如一些位於src/文件夾下的經常使用模塊

// webpack.config.js 配置
module.exports = {
    // ...
    resolve: {
        alias: {
            Utilities: path.resolve(__dirname, 'src/utilities/'),
            Templates: path.resolve(__dirname, 'src/templates/')
        }
    }
}

如今,替換【在導入時使用相對路徑】這種方式,就像這樣:

import Utility from '../../utilities/utility';

能夠這樣使用別名

import Utility from 'Utilities/utility';
devServer.historyApiFallback

當使用 HTML5 History API 時,任意的 404 響應均可能須要被替代爲 index.html。經過傳入如下啓用:

module.exports = {
    // ...
    devServer = {
        historyApiFallback: {
            index: '/dist/index.html'
        }
    }
}
接口Api代理devServer.proxy

參考地址

若是你有單獨的後端開發服務器 API,而且但願在同域名下發送 API 請求 ,那麼代理某些 URL 會頗有用(能夠避免瀏覽器跨域報錯)。

在 localhost:3000 上有後端服務的話,你能夠這樣啓用代理:

// webpack.config.js配置
module.exports = {
    // ...
    devServer: {
        proxy: {
            '/api': 'http://localhost:3000'
        }
    }
}

請求到 /api/users 如今會被代理到請求 http://localhost:3000/api/users

module.exports = {
    // ...
    devServer: {
        proxy: {
            '/manage': {
                    target: 'http://admintest.happymmall.com',
                    changeOrigin: true
                },
                '/user/logout.do': {
                    target: 'http://admintest.happymmall.com',
                    changeOrigin: true
                }
        }
    }
}
相關文章
相關標籤/搜索