摘要:先來說說搭建官方文檔上也有提供直接下載包,但是修改配置比較麻煩修改配置需要執行自行搭建一個項目并且配置主要記錄學習階段總結的可能不太好,勉強看看,重點記錄一下第二種的方式通過管理包下載官網鏈接安裝步驟都有的在項目目錄下,執行會出
先來說說react搭建:
1 官方文檔上也有提供直接下載react包,但是修改webpack配置比較麻煩
npx create-react-app my-app cd my-app npm start
修改webpack配置需要執行
npm run eject
2 自行搭建一個項目并且配置webpack--主要記錄學習階段~總結的可能不太好,勉強看看,重點記錄一下第二種的方式
通過yarn管理包
下載yarn
yarn官網鏈接安裝步驟都有的
在項目目錄下,執行yarn init
會出現我們的package.json文件
安裝webpack
yarn add webpack --dev
新建webpack.config.js文件,
貼官網示例:
const path = require("path"); module.exports = { entry: "./src/app.js", output: { path: path.resolve(__dirname, "dist"), filename: "app.js" } };
命令行執行webpack會發現dist目錄
注意:yarn安裝過程中如果出錯,嘗試將yarn切換到淘寶鏡像再進行下載哦~,我安裝過程中出現過問題,切到這就沒問題了
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文件
再次執行webpack命令,會發現dist文件夾下面多了一個index.html
設置html-webpack-plugin的template模版,在src新建index.html,并且設置html內容
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" } )] };
現在dist文檔下面的index.html就是當前src下的index.html的模版了
安裝babel
yarn add babel-loader @babel/core @babel/preset-env
具體詳情見文檔地址 在src/app.js中寫入一些ES6語法,再次執行webpack命令,dist/app.js進行了轉換
安裝react轉換 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") );
再執行webpack進行打包
如果出現Error: Plugin/Preset files are not allowed to export objects, only functions.錯誤
說明babel的版本不一致,我這邊是因為"babel-preset-react": "^6.24.1"默認裝的6版本,其他babel安裝的是7版本,所以統一升級到7或者降級到6
yarn add babel-preset-react@7.0.0 --dev
這樣在進行打包,就可以了,這個時候打開dist/index.html我們看到hello, world!說成功編譯了react
安裝style-loader
yarn add css-loader style-loader --dev
安裝地址操作詳情
在webpack.config.js的rules中添加
{ test: /.css$/, use: ["style-loader", "css-loader"], },
在src下新建一個文件index.css,隨便修改一點樣式
h1{ color:#F00; }
在app.jsx中引入
import "./index.css"
再次執行webpack打包,刷新dist/index.html
安裝ExtractTextWebpackPlugin插件將css獨立到多帶帶的文件
yarn add extract-text-webpack-plugin --dev
官網鏈接地址
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配置如上
再次執行webpack,dist目錄下就多了一個index.css了~
注意:打包遇到Tapable.plugin is deprecated. Use new API on .hooks instead錯誤,原因是extract-text-webpack-plugin目前版本不支持webpack4
執行: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"] }) }
新建一個index.scss文件
body{ background: #ccc; #app{ font-size: 22px; } }
在執行webpack會出現報錯Cannot find module "node-sass"
查看文檔鏈接
需要安裝node-sass
yarn add node-sass --dev
打包,查看index.html可以看到樣式應用上去了~
安裝url-loader處理圖片鏈接
yarn add url-loader file-loader --dev
官網地址
在rules中加入:
{ test: /.(png|jpg|gif)$/i, use: [ { loader: "url-loader", options: { limit: 8192 } } ] }
項目中引入圖片,進行打包,這樣圖片資源也打包解析進去了~
添加解析字體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"
}
執行yarn run start啟動項目
yarn run build打包項目
最后附上當前為止修改后的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" } } };
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103653.html
摘要:另外一方面,即使不是想搭建自己的工作流,而是使用現成的腳手架,大家都會用。顯然,徹底掌握如何從零開始搭建一個能夠貼近實際項目的工作流,是一個想要滿足工作最基本要求的人必備的技能。 很多人想搭建一套屬于自己的前端工作流,最開始的時候我們的工作流萌芽是從寫一個項目的時候,拷貝以前寫過的一個項目文件夾改完直接使用開始的,后來使用了grunt和gulp,再到webpack,每一個前端人員想掌握...
摘要:寫在前面準備學習一下和相關的東西,官方的腳手架看起來太繁瑣,所以打算自己來搭建一個,參考了這個文檔從零搭建全家桶框架教程步驟上都差不多第一步,依賴總覽完成到我現在半成品的過程中,目前完成開發模式的相關操作,添加了按需加載的地步。 寫在前面 準備學習一下react和webpack相關的東西,官方的腳手架看起來太繁瑣,所以打算自己來搭建一個,參考了這個文檔從零搭建React全家桶框架教程;...
摘要:譯文原文來自寫在前面使用已經蠻長一段時間但是在新項目開始之際都是東拼西湊其他項目的配置來使用如果要自己從零開始寫一個完整項目的配置估計得費死勁所以在發布版本之際正是時候來認真從零開始學習了是一個出自的庫用于構建用戶交互界面是一個非常厲害的有 譯文,原文來自https://scotch.io/tutorials/s...寫在前面,使用webpack已經蠻長一段時間,但是在新項目開始之際,...
摘要:接下來安裝和,執行命令安裝很順利,沒有遇到任何問題。再總結一下我們遇到的坑初始化時的項目名稱要合規,特別是不能出現中劃線下劃線。另外再增加,這樣刷新的速度會大大加快最終的文件目錄結構為各文件的最終內容本文也同步發表在我的公眾號“我的天空” 從零開始,用最少的配置、最少的代碼、最少的依賴來搭建一個最簡單的webpack+react環境。 最近在玩webpack+rea...
摘要:開發一個項目,通常避免不了要去配置和之類,以支持或模塊及各種新語法,及進行語法的轉義。當然也可以用腳手架快速創建一個項目,但與此同時常常又顯的不太自由。本文是一篇使用入門文章,介紹如何從零開始手動配置一個基于的工程。 開發一個 React 項目,通常避免不了要去配置 Webpack 和 babel 之類,以支持 commonjs 或 es 模塊及各種 es 新語法,及進行 jsx 語法...
閱讀 3072·2021-11-25 09:43
閱讀 2251·2021-09-07 10:28
閱讀 3543·2021-08-11 11:14
閱讀 2777·2019-08-30 13:49
閱讀 3544·2019-08-29 18:41
閱讀 1162·2019-08-29 11:26
閱讀 1976·2019-08-26 13:23
閱讀 3372·2019-08-26 10:43