国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用webpack搭建react開(kāi)發(fā)環(huán)境

Freeman / 436人閱讀

摘要:安裝和使用初始化項(xiàng)目安裝是的簡(jiǎn)寫,是指安裝模塊并保存到的中,主要在開(kāi)發(fā)環(huán)境中的依賴包如果使用版本,還需要安裝。新建一下項(xiàng)目結(jié)構(gòu)使用非全局安裝下的打包。

安裝和使用webpack

1.初始化項(xiàng)目

mkdir react-redux && cd react-redux
npm init -y

2.安裝webpack

npm i webpack -D

npm i -D 是 npm install --save-dev 的簡(jiǎn)寫,是指安裝模塊并保存到 package.json 的 devDependencies中,主要在開(kāi)發(fā)環(huán)境中的依賴包.
如果使用webpack 4+ 版本,還需要安裝 CLI。

npm install -D webpack webpack-cli

3.新建一下項(xiàng)目結(jié)構(gòu)

  react-redux
  |- package.json
+ |- /dist
+   |- index.html
  |- /src
    |- index.js

index.html




    
    Title


index.js

document.querySelector("#root").innerHTML = "webpack使用";

非全局安裝下的打包。

node_modules.binwebpack srcindex.js --output distundle.js --mode development

打開(kāi)dist目錄下的html顯示webpack使用

配置webpack

1.使用配置文件

const path=require("path");
module.exports={
    entry:"./src/index.js",
    output:{
        filename:"bundle.js",
        path:path.resolve(__dirname,"dist")
    }
};

運(yùn)行命令: node_modules.binwebpack --mode production 可以以進(jìn)行打包
2.NPM 腳本(NPM Scripts)
在在 package.json 添加一個(gè) npm 腳本(npm script):
"build": "webpack --mode production"
運(yùn)行npm run build即可打包

使用webpack構(gòu)建本地服務(wù)器

webpack-dev-server 提供了一個(gè)簡(jiǎn)單的 web 服務(wù)器,并且能夠?qū)崟r(shí)重新加載。
1.安裝 npm i -D webpack-dev-server
修改配置文件webpack.config.js

const path=require("path");
module.exports={
    entry:"./src/index.js",
    output:{
        filename:"bundle.js",
        path:path.resolve(__dirname,"dist")
    },
    //以下是新增的配置
    devServer:{
        contentBase: "./dist",//本地服務(wù)器所加載的頁(yè)面所在的目錄
        historyApiFallback: true,//不跳轉(zhuǎn)
        inline: true,//實(shí)時(shí)刷新
        port:3000,
        open:true,//自動(dòng)打開(kāi)瀏覽器
    }
};

運(yùn)行webpack-dev-server --progress,瀏覽器打開(kāi)localhost:3000,修改代碼會(huì)實(shí)時(shí)顯示修改的結(jié)果.
添加scripts腳本,運(yùn)行npm start自動(dòng)打開(kāi)http://localhost:8080/

"start": "webpack-dev-server --open --mode development" 

啟動(dòng)webpack-dev-server后,在目標(biāo)文件夾中是看不到編譯后的文件的,實(shí)時(shí)編譯后的文件都保存到了內(nèi)存當(dāng)中。因此使用webpack-dev-server進(jìn)行開(kāi)發(fā)的時(shí)候都看不到編譯后的文件
2.熱更新
配置一個(gè)webpack自帶的插件并且還要在主要js文件里檢查是否有module.hot

plugins:[
        //熱更新,不是刷新
        new webpack.HotModuleReplacementPlugin()
    ],

在主要js文件里添加以下代碼

if (module.hot){
    //實(shí)現(xiàn)熱更新
    module.hot.accept();
}

在webpack.config.js中開(kāi)啟熱更新

devServer:{
        contentBase: "./dist",//本地服務(wù)器所加載的頁(yè)面所在的目錄
        historyApiFallback: true,//不跳轉(zhuǎn)
        inline: true,//實(shí)時(shí)刷新
        port:3000,
        open:true,//自動(dòng)打開(kāi)瀏覽器
        hot:true  //開(kāi)啟熱更新
    },

熱更新允許在運(yùn)行時(shí)更新各種模塊,而無(wú)需進(jìn)行完全刷新.

配置Html模板

1.安裝html-webpack-plugin插件

npm i html-webpack-plugin -D

2.在webpack.config.js里引用插件

const path=require("path");
let webpack=require("webpack");
let HtmlWebpackPlugin=require("html-webpack-plugin");
module.exports={
    entry:"./src/index.js",
    output:{
        //添加hash可以防止文件緩存,每次都會(huì)生成4位hash串
        filename:"bundle.[hash:4].js",
        path:path.resolve("dist")
    },
    //以下是新增的配置
    devServer:{
        contentBase: "./dist",//本地服務(wù)器所加載的頁(yè)面所在的目錄
        historyApiFallback: true,//不跳轉(zhuǎn)
        inline: true,//實(shí)時(shí)刷新
        port:3000,
        open:true,//自動(dòng)打開(kāi)瀏覽器
        hot:true  //開(kāi)啟熱更新
    },
    plugins:[
        new HtmlWebpackPlugin({
            template:"./src/index.html",
            hash:true, //會(huì)在打包好的bundle.js后面加上hash串
        })
    ]
};

運(yùn)行npm run build進(jìn)行打包,這時(shí)候每次npm run build的時(shí)候都會(huì)在dist目錄下創(chuàng)建很多打好的包.應(yīng)該每次打包之前都將dist目錄下的文件清空,再把打包好的文件放進(jìn)去,這里使用clean-webpack-plugin插件.通過(guò)npm i clean-webpack-plugin -D命令安裝.然后在webpack.config.js中引用插件.

const path=require("path");
let webpack=require("webpack");
let HtmlWebpackPlugin=require("html-webpack-plugin");
let CleanWebpackPlugin=require("clean-webpack-plugin");
module.exports={
    entry:"./src/index.js",
    output:{
        //添加hash可以防止文件緩存,每次都會(huì)生成4位hash串
        filename:"bundle.[hash:4].js",
        path:path.resolve("dist")
    },
    //以下是新增的配置
    devServer:{
        contentBase: "./dist",//本地服務(wù)器所加載的頁(yè)面所在的目錄
        historyApiFallback: true,//不跳轉(zhuǎn)
        inline: true,//實(shí)時(shí)刷新
        port:3000,
        open:true,//自動(dòng)打開(kāi)瀏覽器
        hot:true  //開(kāi)啟熱更新
    },
    plugins:[
        new HtmlWebpackPlugin({
            template:"./src/index.html",
            hash:true, //會(huì)在打包好的bundle.js后面加上hash串
        }),
         //打包前先清空
        new CleanWebpackPlugin("dist")
    ]
};

之后打包便不會(huì)產(chǎn)生多余的文件.

編譯es6和jsx

1.安裝babel
npm i babel-core babel-loader babel-preset-env babel-preset-react babel-preset-stage-0 -D
babel-loader: babel加載器
babel-preset-env : 根據(jù)配置的 env 只編譯那些還不支持的特性。
babel-preset-react: jsx 轉(zhuǎn)換成js
2.添加.babelrc配置文件

{
  "presets": ["env", "stage-0","react"] //從左向右解析
}

3.修改webpack.config.js

const path=require("path");
module.exports={
    entry:"./src/index.js",
    output:{
        filename:"bundle.js",
        path:path.resolve(__dirname,"dist")
    },
    //以下是新增的配置
    devServer:{
        contentBase: "./dist",//本地服務(wù)器所加載的頁(yè)面所在的目錄
        historyApiFallback: true,//不跳轉(zhuǎn)
        inline: true//實(shí)時(shí)刷新
    },
    module:{
        rules:[
            {
                test:/.js$/,
                exclude:/(node_modules)/,  //排除掉nod_modules,優(yōu)化打包速度
                use:{
                    loader:"babel-loader"
                }
            }
        ]
    }
};
開(kāi)發(fā)環(huán)境與生產(chǎn)環(huán)境分離

1.安裝webpack-merge

npm install --save-dev webpack-merge

2.新建一個(gè)名為webpack.common.js文件作為公共配置,寫入以下內(nèi)容:

const path=require("path");
let webpack=require("webpack");
let HtmlWebpackPlugin=require("html-webpack-plugin");
let CleanWebpackPlugin=require("clean-webpack-plugin");
module.exports={
    entry:["babel-polyfill","./src/index.js"],
    output:{
        //添加hash可以防止文件緩存,每次都會(huì)生成4位hash串
        filename:"bundle.[hash:4].js",
        path:path.resolve(__dirname,"dist")
    },
    plugins:[
        new HtmlWebpackPlugin({
            template:"./src/index.html",
            hash:true, //會(huì)在打包好的bundle.js后面加上hash串
        }),
        //打包前先清空
        new CleanWebpackPlugin("dist"),
        new webpack.HotModuleReplacementPlugin()  //查看要修補(bǔ)(patch)的依賴
    ],
    module:{
        rules:[
            {
                test:/.js$/,
                exclude:/(node_modules)/,  //排除掉nod_modules,優(yōu)化打包速度
                use:{
                    loader:"babel-loader"
                }
            }
        ]
    }
};

3.新建一個(gè)名為webpack.dev.js文件作為開(kāi)發(fā)環(huán)境配置

const merge=require("webpack-merge");
const path=require("path");
let webpack=require("webpack");
const common=require("./webpack.common.js");
module.exports=merge(common,{
    devtool:"inline-soure-map",
    mode:"development",
    devServer:{
        historyApiFallback: true, //在開(kāi)發(fā)單頁(yè)應(yīng)用時(shí)非常有用,它依賴于HTML5 history API,如果設(shè)置為true,所有的跳轉(zhuǎn)將指向index.html
        contentBase:path.resolve(__dirname, "../dist"),//本地服務(wù)器所加載的頁(yè)面所在的目錄
        inline: true,//實(shí)時(shí)刷新
        open:true,
        compress: true,
        port:3000,
        hot:true  //開(kāi)啟熱更新
    },
    plugins:[
        //熱更新,不是刷新
        new webpack.HotModuleReplacementPlugin(),
    ],
});

4.新建一個(gè)名為webpack.prod.js的文件作為生產(chǎn)環(huán)境配置

 const merge = require("webpack-merge");
 const path=require("path");
 let webpack=require("webpack");
 const UglifyJSPlugin = require("uglifyjs-webpack-plugin");
 const common = require("./webpack.common.js");
 module.exports = merge(common, {
     mode:"production",
     plugins: [
         new UglifyJSPlugin()
     ]
 });
配置react

1.安裝react、react-dom
npm i react react-dom -S
2.新建App.js,添加以下內(nèi)容.

import React from "react";
class App extends React.Component{
    render(){
        return (
佳佳加油
); } } export default App;

3.在index.js添加以下內(nèi)容.

import React from "react";
import ReactDOM from "react-dom";
import {AppContainer} from "react-hot-loader";
import App from "./App";
ReactDOM.render(
    
        
    ,
    document.getElementById("root")
);

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

4.安裝react-hot-loader
npm i -D react-hot-loader
5.修改配置文件
在 webpack.config.js 的 entry 值里加上 react-hot-loader/patch,一定要寫在entry 的最前面,如果有 babel-polyfill 就寫在babel-polyfill 的后面
6.在 .babelrc 里添加 plugin,"plugins": ["react-hot-loader/babel"]

處理SASS

1.安裝style-loader css-loader url-loader
npm install style-loader css-loader url-loader --save-dev
2.安裝sass-loader node-sass
npm install sass-loader node-sass --save-dev
3.安裝mini-css-extract-plugin,提取多帶帶打包c(diǎn)ss文件
npm install --save-dev mini-css-extract-plugin
4.配置webpack配置文件
webpack.common.js

{
    test:/.(png|jpg|gif)$/,
    use:[
        "url-loader"
    ]
},

webpack.dev.js

{
    test:/.scss$/,
    use:[
        "style-loader",
        "css-loader",
        "sass-loader"
    ]
}

webpack.prod.js

 const merge = require("webpack-merge");
 const path=require("path");
 let webpack=require("webpack");
 const MiniCssExtractPlugin=require("mini-css-extract-plugin");
 const UglifyJSPlugin = require("uglifyjs-webpack-plugin");
 const common = require("./webpack.common.js");
 module.exports = merge(common, {
     mode:"production",
     module:{
         rules:[
             {
                 test:/.scss$/,
                 use:[
                     // fallback to style-loader in development
                     process.env.NODE_ENV !== "production" ? "style-loader" : MiniCssExtractPlugin.loader,
                     "css-loader",
                     "sass-loader"
                 ]
             }
         ]
     },
     plugins: [
         new UglifyJSPlugin(),
         new MiniCssExtractPlugin({
             // Options similar to the same options in webpackOptions.output
             // both options are optional
             filename: "[name].css",
             chunkFilename: "[id].css"
         })
     ]
 });

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/52336.html

相關(guān)文章

  • react實(shí)時(shí)熱更新開(kāi)發(fā)環(huán)境搭建

    摘要:搭建一個(gè)實(shí)時(shí)熱更新開(kāi)發(fā)環(huán)境,當(dāng)代碼變更時(shí),可以不用重新啟動(dòng)打包文件,這樣會(huì)很大地提高我們的開(kāi)發(fā)效率。完成開(kāi)發(fā)環(huán)境搭建。 搭建一個(gè)react實(shí)時(shí)熱更新開(kāi)發(fā)環(huán)境,當(dāng)代碼變更時(shí),可以不用重新啟動(dòng)webpack打包文件,這樣會(huì)很大地提高我們的開(kāi)發(fā)效率。 使用工具 vscode編輯器,可以實(shí)時(shí)git推送更新自帶git命令行,隨意下載各種語(yǔ)言框架代碼格式化高亮插件 chrome ^58瀏覽器性能...

    princekin 評(píng)論0 收藏0
  • react實(shí)時(shí)熱更新開(kāi)發(fā)環(huán)境搭建

    摘要:搭建一個(gè)實(shí)時(shí)熱更新開(kāi)發(fā)環(huán)境,當(dāng)代碼變更時(shí),可以不用重新啟動(dòng)打包文件,這樣會(huì)很大地提高我們的開(kāi)發(fā)效率。完成開(kāi)發(fā)環(huán)境搭建。 搭建一個(gè)react實(shí)時(shí)熱更新開(kāi)發(fā)環(huán)境,當(dāng)代碼變更時(shí),可以不用重新啟動(dòng)webpack打包文件,這樣會(huì)很大地提高我們的開(kāi)發(fā)效率。 使用工具 vscode編輯器,可以實(shí)時(shí)git推送更新自帶git命令行,隨意下載各種語(yǔ)言框架代碼格式化高亮插件 chrome ^58瀏覽器性能...

    Vultr 評(píng)論0 收藏0
  • React系列---Webpack環(huán)境搭建(二)不同環(huán)境不同配置

    摘要:系列環(huán)境搭建一手動(dòng)搭建系列環(huán)境搭建二不同環(huán)境不同配置系列環(huán)境搭建三打包性能優(yōu)化實(shí)際項(xiàng)目中,往往不同環(huán)境有不同的構(gòu)建需求。 React系列---Webpack環(huán)境搭建(一)手動(dòng)搭建React系列---Webpack環(huán)境搭建(二)不同環(huán)境不同配置React系列---Webpack環(huán)境搭建(三)打包性能優(yōu)化 實(shí)際項(xiàng)目中,往往不同環(huán)境有不同的構(gòu)建需求。比如開(kāi)發(fā)、測(cè)試和生產(chǎn)環(huán)境對(duì)應(yīng)的后端接口地...

    coordinate35 評(píng)論0 收藏0
  • 手把手教你從零搭建react局部熱加載環(huán)境

    摘要:有沒(méi)有辦法實(shí)現(xiàn)就局部刷新呢當(dāng)然是有第十步執(zhí)行為了實(shí)現(xiàn)局部熱加載,我們需要添加插件。 前言 用了3個(gè)多月的vue自認(rèn)為已經(jīng)是一名合格的vue框架api搬運(yùn)工,對(duì)于vue的api使用到達(dá)了一定瓶頸,無(wú)奈水平有限,每每深入底層觀賞源碼時(shí)候都迷失了自己。 遂決定再找個(gè)框架學(xué)習(xí)學(xué)習(xí)看看能否突破思維局限,加上本人早已對(duì)React、RN技術(shù)垂涎已久,于是決定找找教程來(lái)學(xué)習(xí)。無(wú)奈第一步就卡在了環(huán)境搭...

    quietin 評(píng)論0 收藏0
  • react+webpack+webstorm開(kāi)發(fā)環(huán)境搭建

    摘要:先是基礎(chǔ)知識(shí),首先是補(bǔ)了的基礎(chǔ),使用了的入門教程。另外關(guān)于,慕課的視頻教程講的也比較清晰,適合入門統(tǒng)統(tǒng)過(guò)了一遍之后,開(kāi)始建立腳手架,正式上馬編寫。廢話不多說(shuō)了,下面一步一步開(kāi)始了。安裝完成之后,記得設(shè)置路徑構(gòu)建項(xiàng)目使用新建一個(gè)空白項(xiàng)目。 前言 春節(jié)期間,更新了一下自己關(guān)于前端的知識(shí)體系,要知道對(duì)于前端技術(shù),我還是停留在JSP,JQUERY的時(shí)代,現(xiàn)在項(xiàng)目里面使用REACT作為前臺(tái),所以...

    Snailclimb 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Freeman

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<