成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

從0開(kāi)始配置webpack和搭建一個(gè)React項(xiàng)目

davidac / 2580人閱讀

摘要:先來(lái)說(shuō)說(shuō)搭建官方文檔上也有提供直接下載包,但是修改配置比較麻煩修改配置需要執(zhí)行自行搭建一個(gè)項(xiàng)目并且配置主要記錄學(xué)習(xí)階段總結(jié)的可能不太好,勉強(qiáng)看看,重點(diǎn)記錄一下第二種的方式通過(guò)管理包下載官網(wǎng)鏈接安裝步驟都有的在項(xiàng)目目錄下,執(zhí)行會(huì)出

先來(lái)說(shuō)說(shuō)react搭建:
1 官方文檔上也有提供直接下載react包,但是修改webpack配置比較麻煩

npx create-react-app my-app
cd my-app
npm start

修改webpack配置需要執(zhí)行

npm run eject

2 自行搭建一個(gè)項(xiàng)目并且配置webpack--主要記錄學(xué)習(xí)階段~總結(jié)的可能不太好,勉強(qiáng)看看,重點(diǎn)記錄一下第二種的方式

通過(guò)yarn管理包
 

下載yarn

yarn官網(wǎng)鏈接安裝步驟都有的

在項(xiàng)目目錄下,執(zhí)行yarn init

會(huì)出現(xiàn)我們的package.json文件

安裝webpack

yarn add webpack --dev

新建webpack.config.js文件,

貼官網(wǎng)示例:

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

命令行執(zhí)行webpack會(huì)發(fā)現(xiàn)dist目錄

注意:yarn安裝過(guò)程中如果出錯(cuò),嘗試將yarn切換到淘寶鏡像再進(jìn)行下載哦~,我安裝過(guò)程中出現(xiàn)過(guò)問(wèn)題,切到這就沒(méi)問(wèn)題了
yarn config set registry "https://registry.npm.taobao.org"

安裝html-webpack-plugin

yarn add html-webpack-plugin --dev

文檔使用鏈接地址
按照文檔操作,修改webpack.config.js使用html-webpack-plugin打包html文件
再次執(zhí)行webpack命令,會(huì)發(fā)現(xiàn)dist文件夾下面多了一個(gè)index.html
設(shè)置html-webpack-plugin的template模版,在src新建index.html,并且設(shè)置html內(nèi)容

  
    const path = require("path");
    var HtmlWebpackPlugin = require("html-webpack-plugin");
    module.exports = {
      entry: "./src/app.js",
      output: {
        path: path.resolve(__dirname, "dist"),
        filename: "app.js"
      },
      plugins: [new HtmlWebpackPlugin(
        {
            template:"./src/index.html"
        }
      )]
    };

現(xiàn)在dist文檔下面的index.html就是當(dāng)前src下的index.html的模版了

安裝babel

yarn add babel-loader @babel/core @babel/preset-env

具體詳情見(jiàn)文檔地址 在src/app.js中寫(xiě)入一些ES6語(yǔ)法,再次執(zhí)行webpack命令,dist/app.js進(jìn)行了轉(zhuǎn)換

安裝react轉(zhuǎn)換 babel-preset-react

yarn add babel-preset-react --dev

修改webpack.config.js

   const path = require("path");
   var HtmlWebpackPlugin = require("html-webpack-plugin");
   module.exports = {
     entry: "./src/app.jsx"
       path: path.resolve(__dirname, "dist"),
       filename: "app.js"
     },
     plugins: [new HtmlWebpackPlugin(
       {
           template:"./src/index.html"
       }
     )],
     module: {
       rules: [
         {
           test: /.m?jsx$/,
           exclude: /(node_modules|bower_components)/,
           use: {
             loader: "babel-loader",
             options: {
               presets: ["@babel/preset-env","react"]
             }
           }
         }
       ]
     }
   };

安裝react
yarn add react react-dom
react添加操作地址詳情
將src/app.js修改為app.jsx

   import React from "react";
   import ReactDOM from "react-dom";

   ReactDOM.render(
     

Hello, world!

, document.getElementById("app") );

再執(zhí)行webpack進(jìn)行打包
如果出現(xiàn)Error: Plugin/Preset files are not allowed to export objects, only functions.錯(cuò)誤

說(shuō)明babel的版本不一致,我這邊是因?yàn)?babel-preset-react": "^6.24.1"默認(rèn)裝的6版本,其他babel安裝的是7版本,所以統(tǒng)一升級(jí)到7或者降級(jí)到6

yarn add [email protected] --dev

這樣在進(jìn)行打包,就可以了,這個(gè)時(shí)候打開(kāi)dist/index.html我們看到hello, world!說(shuō)成功編譯了react

安裝style-loader

yarn add css-loader style-loader --dev
安裝地址操作詳情
在webpack.config.js的rules中添加

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

在src下新建一個(gè)文件index.css,隨便修改一點(diǎn)樣式

   h1{
       color:#F00;
   }

在app.jsx中引入

   import "./index.css"

再次執(zhí)行webpack打包,刷新dist/index.html

安裝ExtractTextWebpackPlugin插件將css獨(dú)立到多帶帶的文件

   yarn add extract-text-webpack-plugin --dev

官網(wǎng)鏈接地址

   const path = require("path");
   var HtmlWebpackPlugin = require("html-webpack-plugin");
   const ExtractTextPlugin = require("extract-text-webpack-plugin");
   module.exports = {
       entry: "./src/app.jsx",
       output: {
           path: path.resolve(__dirname, "dist"),
           filename: "app.js"
       },
       module: {
           rules: [
           {
               test: /.m?jsx$/,
               exclude: /(node_modules|bower_components)/,
               use: {
               loader: "babel-loader",
               options: {
                   presets: ["@babel/preset-env","react"]
               }
               }
           },
           {
               test: /.css$/,
               use: ExtractTextPlugin.extract({
                   fallback: "style-loader",
                   use: "css-loader"
               })
           },
           ]
       },
       plugins: [
           new HtmlWebpackPlugin(
               {
                   template:"./src/index.html"
               }
           ),
           new ExtractTextPlugin("index.css"),
       ],
   };

webpack.config.js配置如上
再次執(zhí)行webpack,dist目錄下就多了一個(gè)index.css了~
注意:打包遇到Tapable.plugin is deprecated. Use new API on .hooks instead錯(cuò)誤,原因是extract-text-webpack-plugin目前版本不支持webpack4
執(zhí)行:yarn add extract-text-webpack-plugin@next --dev

安裝sass-loader

   yarn add sass-loader --dev

在webpack.config.js中rules添加

   {
       test: /.scss$/,
       use: ExtractTextPlugin.extract({
           fallback: "style-loader",
           use: ["css-loader", "sass-loader"]
       })
   }

新建一個(gè)index.scss文件

   body{
       background: #ccc;
       #app{
           font-size: 22px;
       }
   }

在執(zhí)行webpack會(huì)出現(xiàn)報(bào)錯(cuò)Cannot find module "node-sass"
查看文檔鏈接
需要安裝node-sass

   yarn add node-sass --dev

打包,查看index.html可以看到樣式應(yīng)用上去了~

安裝url-loader處理圖片鏈接

   yarn add url-loader file-loader --dev

官網(wǎng)地址
在rules中加入:

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

項(xiàng)目中引入圖片,進(jìn)行打包,這樣圖片資源也打包解析進(jìn)去了~

添加解析字體rule

  {
       test: /.(eot|svg|ttf|woff|woff2|otf)$/i,
       use: [
           {
             loader: "url-loader",
             options: {
               limit: 8192,
               name:"resource/[name].[ext]"
             }
           }
       ]
   },

添加webpack-dev-server

   yarn add webpack-dev-server --dev

修改package.json添加
"scripts": {
"test": "echo "Error: no test specified" && exit 1",
"watch": "webpack --watch",
"start": "webpack-dev-server --open",
"build": "webpack-cli"
}
執(zhí)行yarn run start啟動(dòng)項(xiàng)目

yarn run build打包項(xiàng)目

最后附上當(dāng)前為止修改后的webpack.config.js

       const path = require("path");
       const webpack = require("webpack");
       var HtmlWebpackPlugin = require("html-webpack-plugin");
       const ExtractTextPlugin = require("extract-text-webpack-plugin");
       module.exports = {
           entry: "./src/app.jsx",
           output: {
               path: path.resolve(__dirname, "dist"),
               filename: "./js/[name].[hash].js",
               chunkFilename: "./js/[name].[hash].js",
           },
           devServer: {
               port: 8080,
               proxy: {
                   "/expo": {
                       target: "https://xxx",
                       changeOrigin: true,
                       pathRewrite: {
                           "/expo": "/expo",
                       },
                       secure: false,
                   },
               },
               hot:true
           },
           module: {
               rules: [
               {
                   test: /.m?jsx$/,
                   exclude: /(node_modules|bower_components)/,
                   use: {
                   loader: "babel-loader",
                   options: {
                       presets: ["@babel/preset-env","react"]
                   }
                   }
               },
               {
                   test: /.css$/,
                   use: ExtractTextPlugin.extract({
                       fallback: "style-loader",
                       use: "css-loader"
                   })
               },
               {
                   test: /.scss$/,
                   use: ExtractTextPlugin.extract({
                       fallback: "style-loader",
                       use: ["css-loader", "sass-loader"]
                   })
               },
               {
                   test: /.(png|jpg|gif|ico|jpeg)$/i,
                   use: [
                     {
                       loader: "url-loader",
                       options: {
                           limit: 8192,
                           name: "[name].[ext]",
                           publicPath: "../images/",
                           outputPath: "images/"
                       }
                     }
                   ]
               },
               {
                   test: /.(eot|svg|ttf|woff|woff2|otf)$/i,
                   use: [{
                       loader: "file-loader",
                       options: {
                         name: "[name].[ext]",
                         publicPath: "../fonts/",
                         outputPath: "fonts/"
                       }
                   }]
               },
               ]
           },
           plugins: [
               new HtmlWebpackPlugin(
                   {
                       template:"./src/index.html"
                   }
               ),
               new ExtractTextPlugin("css/[name].css"),
           ],
           optimization:{
               splitChunks:{
                   name:"common",
                   filename:"js/base.js"
               }
           }
       };

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/103653.html

相關(guān)文章

  • 0開(kāi)始使用webpack搭建react工作流

    摘要:另外一方面,即使不是想搭建自己的工作流,而是使用現(xiàn)成的腳手架,大家都會(huì)用。顯然,徹底掌握如何從零開(kāi)始搭建一個(gè)能夠貼近實(shí)際項(xiàng)目的工作流,是一個(gè)想要滿(mǎn)足工作最基本要求的人必備的技能。 很多人想搭建一套屬于自己的前端工作流,最開(kāi)始的時(shí)候我們的工作流萌芽是從寫(xiě)一個(gè)項(xiàng)目的時(shí)候,拷貝以前寫(xiě)過(guò)的一個(gè)項(xiàng)目文件夾改完直接使用開(kāi)始的,后來(lái)使用了grunt和gulp,再到webpack,每一個(gè)前端人員想掌握...

    bingchen 評(píng)論0 收藏0
  • 學(xué)習(xí)開(kāi)始搭建React腳手架

    摘要:寫(xiě)在前面準(zhǔn)備學(xué)習(xí)一下和相關(guān)的東西,官方的腳手架看起來(lái)太繁瑣,所以打算自己來(lái)搭建一個(gè),參考了這個(gè)文檔從零搭建全家桶框架教程步驟上都差不多第一步,依賴(lài)總覽完成到我現(xiàn)在半成品的過(guò)程中,目前完成開(kāi)發(fā)模式的相關(guān)操作,添加了按需加載的地步。 寫(xiě)在前面 準(zhǔn)備學(xué)習(xí)一下react和webpack相關(guān)的東西,官方的腳手架看起來(lái)太繁瑣,所以打算自己來(lái)搭建一個(gè),參考了這個(gè)文檔從零搭建React全家桶框架教程;...

    cod7ce 評(píng)論0 收藏0
  • 使用webpackbabel搭建react開(kāi)發(fā)環(huán)境

    摘要:譯文原文來(lái)自寫(xiě)在前面使用已經(jīng)蠻長(zhǎng)一段時(shí)間但是在新項(xiàng)目開(kāi)始之際都是東拼西湊其他項(xiàng)目的配置來(lái)使用如果要自己從零開(kāi)始寫(xiě)一個(gè)完整項(xiàng)目的配置估計(jì)得費(fèi)死勁所以在發(fā)布版本之際正是時(shí)候來(lái)認(rèn)真從零開(kāi)始學(xué)習(xí)了是一個(gè)出自的庫(kù)用于構(gòu)建用戶(hù)交互界面是一個(gè)非常厲害的有 譯文,原文來(lái)自https://scotch.io/tutorials/s...寫(xiě)在前面,使用webpack已經(jīng)蠻長(zhǎng)一段時(shí)間,但是在新項(xiàng)目開(kāi)始之際,...

    AZmake 評(píng)論0 收藏0
  • 最小白的webpack+react環(huán)境搭建

    摘要:接下來(lái)安裝和,執(zhí)行命令安裝很順利,沒(méi)有遇到任何問(wèn)題。再總結(jié)一下我們遇到的坑初始化時(shí)的項(xiàng)目名稱(chēng)要合規(guī),特別是不能出現(xiàn)中劃線下劃線。另外再增加,這樣刷新的速度會(huì)大大加快最終的文件目錄結(jié)構(gòu)為各文件的最終內(nèi)容本文也同步發(fā)表在我的公眾號(hào)“我的天空” 從零開(kāi)始,用最少的配置、最少的代碼、最少的依賴(lài)來(lái)搭建一個(gè)最簡(jiǎn)單的webpack+react環(huán)境。 最近在玩webpack+rea...

    番茄西紅柿 評(píng)論0 收藏0
  • ? 使用 Dawn 快速搭建 React 項(xiàng)目!

    摘要:開(kāi)發(fā)一個(gè)項(xiàng)目,通常避免不了要去配置和之類(lèi),以支持或模塊及各種新語(yǔ)法,及進(jìn)行語(yǔ)法的轉(zhuǎn)義。當(dāng)然也可以用腳手架快速創(chuàng)建一個(gè)項(xiàng)目,但與此同時(shí)常常又顯的不太自由。本文是一篇使用入門(mén)文章,介紹如何從零開(kāi)始手動(dòng)配置一個(gè)基于的工程。 開(kāi)發(fā)一個(gè) React 項(xiàng)目,通常避免不了要去配置 Webpack 和 babel 之類(lèi),以支持 commonjs 或 es 模塊及各種 es 新語(yǔ)法,及進(jìn)行 jsx 語(yǔ)法...

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

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

0條評(píng)論

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