国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

搞清楚怎樣基于 Webpack5 從 0 搭建 React開發(fā)環(huán)境-超詳細(xì)

共 37360字,需瀏覽 75分鐘

 ·

2021-04-09 02:22

文末送《React Node.js開發(fā)實戰(zhàn):從入門到項目上線》書籍

希望你堅持看完并帶走彩蛋

作者:劉江 

原文地址:https://juejin.cn/post/6929496472232656909


初始化

創(chuàng)建文件夾并進(jìn)入:

$ mkdir tristana && cd tristana

初始化 package.json

$ npm init

安裝 Webpack

$ npm install webpack webpack-cli --save-dev

創(chuàng)建以下目錄結(jié)構(gòu)、文件和內(nèi)容:

project

tristana
|- package.json
|- /dist
   |- index.html
|- /script
   |- webpack.config.js
|- index.html
|- /src
   |- index.js

src/index.js

document.getElementById("root").append("React");

index.html && dist/index.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>tristana</title>
    </head>
    <body>
        <script src="../src/index.js"></script>
        <div id="root"></div>
    </body>
</html>

script/webpack.config.js

module.exports = {
    mode: "development",
    entry: "./src/index.js",
};

package.json

{
    // ...
    "scripts": {
        "build""webpack --mode=development --config script/webpack.config.js"
    },
}

然后根目錄終端輸入:npm run build

在瀏覽器中打開 dist 目錄下的 index.html,如果一切正常,你應(yīng)該能看到以下文本:'React'

index.html 目前放在 dist 目錄下,但它是手動創(chuàng)建的,下面會教你如何生成 index.html 而非手動編輯它。

Webpack 核心功能

Babel

$ npm install @babel/cli @babel/core babel-loader @babel/preset-env --save-dev

script/webpack.config.js

module.exports = {
    // ...
    module: {
        rules: [
            {
                test: /\.(js|jsx)$/,
                loader: "babel-loader",
                exclude: /node_modules/,
            },
        ],
    },
};

.babelrc

在根目錄下添加 .babelrc 文件:

{
    "presets": ["@babel/preset-env""@babel/preset-react"]
}

樣式

$ npm install style-loader css-loader less less-loader --save-dev

script/webpack.config.js

module.exports = {
    // ...
    module: {
        rules: [
            {
                test: /\.(css|less)$/,
                use: [
                    {
                        loader: "style-loader",
                    },
                    {
                        loader: "css-loader",
                        options: {
                            importLoaders: 1,
                        },
                    },
                    {
                        loader: "less-loader",
                        lessOptions: {
                            javascriptEnabled: true,
                        },
                    },
                ],
            },
        ],
    },
};

圖片字體

$ npm install file-loader --save-dev

script/webpack.config.js

module.exports = {
    // ...
    module: {
        rules: [
            {
                test: /\.(png|svg|jpg|gif|jpeg)$/,
                loader: 'file-loader'
            },
            {
                test: /\.(woff|woff2|eot|ttf|otf)$/,
                loader: 'file-loader'
            }
        ],
    },
};

HTML

$ npm install html-webpack-plugin --save-dev

script/webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    // ...
    plugins: {
        html: new HtmlWebpackPlugin({
            title: 'tristana',
            template: 'public/index.html'
        }),
    }
};

index.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>tristana</title>
    </head>
    <body>
        <div id="root"></div>
    </body>
</html>

開發(fā)服務(wù)

$ npm install webpack-dev-server --save-dev

script/webpack.config.js

const path = require("path");
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    // ...
    devServer: {
        contentBase: path.resolve(__dirname, "dist"),
        hot: true,
        historyApiFallback: true,
        compress: true,
    },
};

package.json

{
    // ...
    "scripts": {
        "start""webpack serve --mode=development --config script/webpack.config.js"
    },
    // ...
}

清理 dist

$ npm install clean-webpack-plugin --save-dev

script/webpack.config.js

const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
    // ...
    plugins: {
        new CleanWebpackPlugin()
    }
};

Tips

由于 webpack 使用的是^5.21.2 版本,在使用該插件時,會提示clean-webpack-plugin: options.output.path not defined. Plugin disabled...,暫時還未解決。

環(huán)境變量

$ npm install cross-env --save-dev

package.json

{
    // ...
    "scripts": {
        "start""cross-env ENV_LWD=development webpack serve  --mode=development --config script/webpack.config.js",
        "build""cross-env ENV_LWD=production webpack --mode=production --config script/webpack.config.js"
    },
    // ...
}

.jsx 文件

安裝依賴

$ npm install @babel/preset-react react react-dom --save-dev

.babelrc

{
  "presets": ["@babel/preset-env""@babel/preset-react"]
}

src/App.jsx

在 src 目錄下,新增 App.jsx 文件:

import React, { Component } from "react";

class App extends Component {
    render() {
        return (
            <div>
                <h1> Hello, World! </h1>
            </div>
        );
    }
}

export default App;

src/index.js

import React from "react";
import ReactDOM from "react-dom";
import App from "./App.jsx";
ReactDOM.render(<App />, document.getElementById("root"));

React Router

安裝依賴

$ npm install react-router history --save

src/index.js

import React from "react";
import ReactDOM from "react-dom";
import { Router, Route, Link } from "react-router";
import { createBrowserHistory } from "history";
import App from "./App.jsx";

const About = () => {
    return <>About</>;
};

ReactDOM.render(
    <Router history={createBrowserHistory()}>
        <Route path="/" component={App} />
        <Route path="/about" component={About} />
    </Router>,
    document.getElementById("root")
);

MobX

安裝依賴

$ npm install mobx mobx-react babel-preset-mobx --save

.babelrc

{
  "presets": ["@babel/preset-env""@babel/preset-react""mobx"]
}

src/store.js

在 src 目錄下新建 store.js

import { observable, action, makeObservable } from "mobx";

class Store {

    constructor() {
        makeObservable(this);
    }

    @observable
    count = 0;

    @action("add")
    add = () => {
        this.count = this.count + 1;
    };

    @action("reduce")
    reduce = () => {
        this.count = this.count - 1;
    };
}
export default new Store();

index.js

import { Provider } from "mobx-react";
import Store from "./store";
// ...
ReactDOM.render(
    <Provider store={Store}>
        <Router history={createBrowserHistory()}>
        <Route path="/" component={App} />
        <Route path="/about" component={About} />
        </Router>
    </Provider>,
    document.getElementById("root")
);

src/App.jsx

import React, { Component } from "react";
import { observer, inject } from "mobx-react";

@inject("store")
@observer
class App extends Component {
    render() {
        return (
            <div>
                <div>{this.props.store.count}</div>
                <button onClick={this.props.store.add}>add</button>
                <button onClick={this.props.store.reduce}>reduce</button>
            </div>
        );
    }
}

export default App;

Ant Design

安裝依賴

$ npm install antd babel-plugin-import --save

.babelrc

{
    // ...
    "plugins": [
        [
            "import",
            {
                "libraryName""antd",
                "libraryDirectory""es",
                "style"true
            }
        ]
    ]
}

src/App.jsx

// ...
import { DatePicker } from "antd";
import "antd/dist/antd.css";

@inject("store")
@observer
class App extends Component {
    render() {
        return (
            <div>
                <DatePicker />
            </div>
        );
    }
}

export default App;

TypeScript

安裝依賴

$ npm install typescript @babel/preset-typescript --save-dev

.babelrc

{
    "presets": [
        // ...
        "@babel/preset-typescript"
    ]
}

tsconfig.json

在根目錄下,新增 tsconfig.json 文件:

{
    "compilerOptions": {
        "emitDecoratorMetadata"true,
        "experimentalDecorators"true,
        "target""ES5",
        "allowSyntheticDefaultImports"true,
        "strict"true,
        "forceConsistentCasingInFileNames"true,
        "allowJs"true,
        "outDir""./dist/",
        "esModuleInterop"true,
        "noImplicitAny"false,
        "sourceMap"true,
        "module""esnext",
        "moduleResolution""node",
        "isolatedModules"true,
        "importHelpers"true,
        "lib": ["esnext""dom""dom.iterable"],
        "skipLibCheck"true,
        "jsx""react",
        "typeRoots": ["node""node_modules/@types"],
        "rootDirs": ["./src"],
        "baseUrl""./src"
    },
    "include": ["./src/**/*"],
    "exclude": ["node_modules"]
}

src/App.jsx

更換文件后綴 App.jsx -> App.tsx

import React, { Component } from "react";
import { observer, inject } from "mobx-react";
import { DatePicker } from "antd";
import "antd/dist/antd.css";

@inject("store")
@observer
class App extends Component {
    props: any;
    render() {
        return (
            <div>
                <DatePicker />
                <div>{this.props.store.count}</div>
                <button onClick={this.props.store.add}>add</button>
                <button onClick={this.props.store.reduce}>reduce</button>
            </div>
        );
    }
}

export default App;

代碼規(guī)范

代碼校驗、代碼格式化、Git 提交前校驗、Vscode配置、編譯校驗

ESLint

安裝依賴

$ npm install @typescript-eslint/parser eslint eslint-plugin-standard @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-plugin-promise  --save-dev

.eslintrc.js

在根目錄下,新增 .eslintrc.js 文件:

module.exports = {
    extends: ["eslint:recommended""plugin:react/recommended"],
    env: {
        browser: true,
        commonjs: true,
        es6: true,
    },
    globals: {
        $: true,
        process: true,
        __dirname: true,
    },
    parser: "@typescript-eslint/parser",
    parserOptions: {
        ecmaFeatures: {
            jsx: true,
            modules: true,
        },
        sourceType: "module",
        ecmaVersion: 6,
    },
    plugins: ["react""standard""promise""@typescript-eslint"],
    settings: {
        "import/ignore": ["node_modules"],
        react: {
            version: "latest",
        },
    },
    rules: {
        quotes: [2, "single"],
        "no-console": 0,
        "no-debugger": 1,
        "no-var": 1,
        semi: ["error""always"],
        "no-irregular-whitespace": 0,
        "no-trailing-spaces": 1,
        "eol-last": 0,
        "no-unused-vars": [
        1,
        {
            vars: "all",
            args: "after-used",
        },
        ],
        "no-case-declarations": 0,
        "no-underscore-dangle": 0,
        "no-alert": 2,
        "no-lone-blocks": 0,
        "no-class-assign": 2,
        "no-cond-assign": 2,
        "no-const-assign": 2,
        "no-delete-var": 2,
        "no-dupe-keys": 2,
        "use-isnan": 2,
        "no-duplicate-case": 2,
        "no-dupe-args": 2,
        "no-empty": 2,
        "no-func-assign": 2,
        "no-invalid-this": 0,
        "no-redeclare": 2,
        "no-spaced-func": 2,
        "no-this-before-super": 0,
        "no-undef": 2,
        "no-return-assign": 0,
        "no-script-url": 2,
        "no-use-before-define": 2,
        "no-extra-boolean-cast": 0,
        "no-unreachable": 1,
        "comma-dangle": 2,
        "no-mixed-spaces-and-tabs": 2,
        "prefer-arrow-callback": 0,
        "arrow-parens": 0,
        "arrow-spacing": 0,
        camelcase: 0,
        "jsx-quotes": [1, "prefer-double"],
        "react/display-name": 0,
        "react/forbid-prop-types": [
        2,
        {
            forbid: ["any"],
        },
        ],
        "react/jsx-boolean-value": 0,
        "react/jsx-closing-bracket-location": 1,
        "react/jsx-curly-spacing": [
        2,
        {
            when: "never",
            children: true,
        },
        ],
        "react/jsx-indent": ["error", 4],
        "react/jsx-key": 2,
        "react/jsx-no-bind": 0,
        "react/jsx-no-duplicate-props": 2,
        "react/jsx-no-literals": 0,
        "react/jsx-no-undef": 1,
        "react/jsx-pascal-case": 0,
        "react/jsx-sort-props": 0,
        "react/jsx-uses-react": 1,
        "react/jsx-uses-vars": 2,
        "react/no-danger": 0,
        "react/no-did-mount-set-state": 0,
        "react/no-did-update-set-state": 0,
        "react/no-direct-mutation-state": 2,
        "react/no-multi-comp": 0,
        "react/no-set-state": 0,
        "react/no-unknown-property": 2,
        "react/prefer-es6-class": 2,
        "react/prop-types": 0,
        "react/react-in-jsx-scope": 2,
        "react/self-closing-comp": 0,
        "react/sort-comp": 0,
        "react/no-array-index-key": 0,
        "react/no-deprecated": 1,
        "react/jsx-equals-spacing": 2,
    },
};


.eslintignore

在根目錄下,新增 .eslintignore 文件:

src/assets

.vscode

在根目錄下新增 .vscode 文件夾,然后新增 .vscode/settings.json

{
    "eslint.validate": [
        "javascript",
        "javascriptreact",
        "typescript",
        "typescriptreact"
    ]
}

Perttier

安裝依賴

$ npm install prettier --save-dev

prettier.config.js

在根目錄下,新增 prettier.config.js 文件:

module.exports = {
    // 一行最多 100 字符
    printWidth: 100,
    // 使用 4 個空格縮進(jìn)
    tabWidth: 4,
    // 不使用縮進(jìn)符,而使用空格
    useTabs: false,
    // 行尾需要有分號
    semi: true,
    // 使用單引號
    singleQuote: true,
    // 對象的 key 僅在必要時用引號
    quoteProps: 'as-needed',
    // jsx 不使用單引號,而使用雙引號
    jsxSingleQuote: false,
    // 末尾不需要逗號
    trailingComma: 'none',
    // 大括號內(nèi)的首尾需要空格
    bracketSpacing: true,
    // jsx 標(biāo)簽的反尖括號需要換行
    jsxBracketSameLine: false,
    // 箭頭函數(shù),只有一個參數(shù)的時候,也需要括號
    arrowParens: 'avoid',
    // 每個文件格式化的范圍是文件的全部內(nèi)容
    rangeStart: 0,
    rangeEnd: Infinity,
    // 不需要寫文件開頭的 @prettier
    requirePragma: false,
    // 不需要自動在文件開頭插入 @prettier
    insertPragma: false,
    // 使用默認(rèn)的折行標(biāo)準(zhǔn)
    proseWrap: 'preserve',
    // 根據(jù)顯示樣式?jīng)Q定 html 要不要折行
    htmlWhitespaceSensitivity: 'css',
    // 換行符使用 lf
    endOfLine: 'lf'
};

stylelint

安裝依賴

$ npm install stylelint stylelint-config-standard stylelint-config-prettier --save-dev

stylelint.config.js

在根目錄下,新增 stylelint.config.js 文件:

module.exports = {
    extends: ['stylelint-config-standard''stylelint-config-prettier'],
    ignoreFiles: [
        '**/*.ts',
        '**/*.tsx',
        '**/*.png',
        '**/*.jpg',
        '**/*.jpeg',
        '**/*.gif',
        '**/*.mp3',
        '**/*.json'
    ],
    rules: {
        'at-rule-no-unknown': [
            true,
            {
                ignoreAtRules: ['extends''ignores']
            }
        ],
        indentation: 4,
        'number-leading-zero': null,
        'unit-allowed-list': ['em''rem''s''px''deg''all''vh''%'],
        'no-eol-whitespace': [
            true,
            {
                ignore: 'empty-lines'
            }
        ],
        'declaration-block-trailing-semicolon''always',
        'selector-pseudo-class-no-unknown': [
            true,
            {
                ignorePseudoClasses: ['global']
            }
        ],
        'block-closing-brace-newline-after''always',
        'declaration-block-semicolon-newline-after''always',
        'no-descending-specificity': null,
        'selector-list-comma-newline-after''always',
        'selector-pseudo-element-colon-notation''single'
    }
};

lint-staged、pre-commit

安裝依賴

$ npm install lint-staged prettier eslint pre-commit --save-dev

package.json

{
    // ...
    "scripts": {
        "lint:tsx""eslint --ext .tsx src && eslint --ext .ts src",
        "lint:css""stylelint --aei .less .css src",
        "precommit""lint-staged",
        "precommit-msg""echo 'Pre-commit checks...' && exit 0"
    },
    "pre-commit": [
        "precommit",
        "precommit-msg"
    ],
    "lint-staged": {
        "*.{js,jsx,ts,tsx}": [
            "eslint --fix",
            "prettier --write",
            "git add"
        ],
        "*.{css,less}": [
            "stylelint --fix",
            "prettier --write",
            "git add"
        ]
    }
}

eslint-webpack-plugin

安裝依賴

$ npm install eslint-webpack-plugin --save-dev

script/webpack.config.js

const ESLintPlugin = require('eslint-webpack-plugin');
module.exports = {
    // ...
    plugins: [new ESLintPlugin()],
};

總結(jié)

搭建這個的過程,也是遇到了不少坑,收獲也是蠻多的,希望這個教程能夠幫助更多的同學(xué),少采點坑,完整的 React 開發(fā)環(huán)境可以看這個tristana,求點贊,求關(guān)注!

聲明:文章著作權(quán)歸作者所有,如有侵權(quán),請聯(lián)系小編刪除。

福利時間

最后,我又來給大家送福利了,這么好的書不送幾本給大家怎么行呢?

《React Node.js開發(fā)實戰(zhàn):從入門到項目上線》共10章,分為4篇。

第1篇“React和Node.js基礎(chǔ)”,主要介紹開發(fā)環(huán)境的搭建、常用開發(fā)工具的使用,以及React與Node.js開發(fā)基礎(chǔ)知識;

第2篇“打包部署和項目開發(fā)實戰(zhàn)”,主要介紹構(gòu)建與部署工具Webpack、Nginx和PM2的相關(guān)知識,并重點介紹如何使用React Node.js開發(fā)單頁面評論系統(tǒng)項目案例;

第3篇“React和Node.js進(jìn)階”,主要介紹React與Node.js開發(fā)進(jìn)階知識,并重點介紹如何使用React Node.js開發(fā)社區(qū)項目案例;

第4篇“項目優(yōu)化和服務(wù)端渲染”,主要介紹前后端項目優(yōu)化的常用技巧,以提升系統(tǒng)的性能、用戶體驗和可靠性,并介紹SPA面臨的服務(wù)端渲染問題及其解決方法,涉及Next.js與SEO等技術(shù)。

這次準(zhǔn)備了2種方式抽獎,「評論、在看」這兩種方式都可以參與!感謝親愛的讀者們,你們的支持也是我持續(xù)更文最大的動力。

本次開獎時間為 2021.4.9 22:00

為了避免中獎后失聯(lián),提前加我微信哈


留言抽獎(2本)

  • 留言點贊數(shù)「第一、二名」可獲得一本 《React Node.js開發(fā)實戰(zhàn):從入門到項目上線》

PS:買點贊數(shù)等作弊無效,一切解釋權(quán)歸前端Q所有

在看抽獎(2本)

記得先添加我微信,不然我看不到哪些小伙伴點再看

  • 大獎:隨機(jī)抽取「2位」在看同學(xué)送出一本 《React Node.js開發(fā)實戰(zhàn):從入門到項目上線

  • 參與獎:隨機(jī)抽取「3位」在看送出「5.2元」紅包。


最后


  • 歡迎加我微信(winty230),拉你進(jìn)技術(shù)群,長期交流學(xué)習(xí)...

  • 歡迎關(guān)注「前端Q」,認(rèn)真學(xué)前端,做個專業(yè)的技術(shù)人...

點個在看支持我吧
瀏覽 17
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 99er热精品视频| 亚洲国产成人精品女人久久| 日韩无码黄色片| 99精品在线| 丰滿老婦BBwBBwBBw| av电影在线观看| 国产91福利| 最近中文字幕免费mv第一季歌词大全 | 高清无码在线观看视频| 影音先锋日韩资源| 97香蕉久久国产超碰青草专区| 国产凹凸视频| 永久免费无码中文字幕| 日韩大鸡巴| 2025无码视频| 好男人一区二区三区在线观看| 一本大道久久久久| 欧洲黄色片| 日韩三级片AV| 一级黄色大毛片| 日韩a| 啪啪免费视频| 亚洲黄色大片| 国产精品你懂的| 欧美日韩国产一区二区| 三级精品| 成人视频免费| 黄片视频在线免费观看| 色丁香五月婷婷| 天天视频黄色| 91精品国产综合久久久蜜臀主演| 家庭乱伦av| 大香蕉三级| 人人做人人做人人做,人人做全句下一| 国产成人网站免费观看| 苍井空无码在线观看| 高清日韩欧美| 国产精品视频色| 在线乱视频| 无码精品一区二区免费| 国产精品一卡二卡三卡| 亚洲视频在线观看播放| 久久精品国产AV一区二区三区| 99久久综合九九| 91人妻一区二区| 色第一页| 精品福利一区二区三区| 蝌蚪九色啦403| 四虎无码丰满人妻| 成人国产精品免费观看| 人人操碰人人| 国产色黄视频| 麻豆精品传媒国产剧的特点| 天天干天天上| 少妇搡BBBB搡BBB搡打电话 | 日韩精品一区二区亚洲AV观看| 北京熟妇搡BBBB搡BBBB电影 | 久久久久无码国产精品一区| 高清无码视频直接看| 91视频免费| 亚洲高清无码视频在线播放| 亚洲影音先锋在线| 大香蕉在线视频网| 久久艹伊人| 亚洲AV无码成人精品区在线欢看| 2025最新国产成人精品| 日韩WWW| 国产无遮挡又黄又爽又色| 亚洲激情内射| 京东一热本色道久久爱| 中日韩免费视频| 亚洲AV无码久久精品色无码蜜桃| 天天综合网久久综合网| 日逼免费视频| 超碰手机在线| 欧美成人精品AAA| 嫩BBB嫩BBB嫩BBB| 99在线免费观看视频| 日韩欧美一级| 热久久亚洲中文字幕| 欧美色乱| 亚洲性爱一区二区三区| 天天射天天干天天| 成人在线日韩| 无码电影在线播放| 欧美四虎| 国产操逼大全| 探花AV| 日韩无码免费播放| 在线免费观看黄| 亚洲手机在线| 中文字幕一区二区三区四区五区| 91视频免费观看| 中文字幕淫乱视频欧美| 中文原创麻豆传媒md0052| 黄色毛片在线播放| AV天堂中文字幕| AV无码免费| 青草超碰| 国内精品卡一卡二卡三| 日韩福利电影| 88av在线| 日本高清一区二区高清免费视频 | 久久五月亭亭| 国产精品无码免费| 91看片看婬黄大片| 97色色五月天| 免费成人黄片| 国产操B视频| 欧美亚洲色色网视频| 91麻豆国产福利精品| 成人做爰黄级A片免费看土方| 毛片A| 国产成人自拍偷拍视频| 久久精品视频网站| 亚洲无码一区二区三区| 欧美激情五月天| 国产黄色免费看| 中文字幕免费在线看一区七区| 青青草手机视频在线| 欧美AAAAA| 性爱视频99| 亚洲一级性爱| 久久久久电影| 男女啪啪免费网站| 亚洲一级无码| 黄色在线网| 中文√在线天堂8| 一级片黄片| 亚洲午夜免费视频| 国产福利视频导航| 欧美一级日韩一级| 午色婷婷国产无码| 操美女的逼| 午夜美女福利视频| 亚洲综合中文字幕在线| 成年人A片| 日本不卡一区二区三区| 欧美高清在线综合| 大香蕉伊人电影| 日本中文字幕在线观看视频| 成人免费视频网| 欧洲操逼视频| 国产又粗又长| 伊人色色视频| 超碰在线播| 亚洲激情自拍| 亚洲无码视频一区二区| 五月天激情影院| 精品人妻一区二区三区鲁大师| 黄色av无码| 亚洲videos| 久久婷婷婬片A片AAA| 波多野结衣av中文字幕| 国产靠逼| 午夜操逼| 婷婷在线影院| 日日操日日摸| 99久| 日韩在线免费| 欧美婷婷五月| 成人无码网站在线观看| 亚洲精品伊人| 一级理论片| 无码高清在线观看| 免费欧美黄片| 豆花视频在线看| 一级黄色视频免费看| 日本一级黃色大片看免费| 中文字幕浅井香舞被黑人俘虏| 中文字幕精品久久久久人妻红杏Ⅰ| 九九亚洲精品| 四虎成人精品无码永久在线的客服| 超碰777| 日韩成人无码| 嫩草视频在线播放| 成人免费视频网| 中文不卡视频| 又a又黄高清无码视频| 亚洲码AV波多野| 国产青草视频| 黄片一区二区三区| 人人草人人摸| 黄色视频在线观看大全| 丁香五月天av| 日韩AV小说| 丰满人妻一区二区三区精品高| 亚洲国产视频一区| 在线观看视频国产| 六月丁香视频| 亚洲天天操| 黄色一级片视频| jizz在线观看视频| 五月天毛片| 日韩不卡精品| 青青草91在线| 久久精品成人导航| 国产一级a爱做片免费☆观看| 成人视频18| 国产成人精品国内自产拍免费看| 欧美一级成人| 99久久99久久| 久久精品一区二区| 欧美一级AAA大片免费观看| 日本黄色A片免费看| 亚洲高清成人动漫| 俺去也视频| 亚州AV天堂| 免费看黄色的网站| a级网站| 伊人导航| 日韩在线观看网站| 欧美性综合网| 在线观看网址你懂的| 中国老女人操逼| 色色色成人视频| 亚洲黄色小电影| 欧美一级婬片AAAAAA片| 五月天无码| 综合站欧美精品| 操b视频在线免费观看| 天天免费视频| AA无码| 日韩欧美成人在线视频| 热久久中文字幕| 日韩在线一区二区| 久久成人免费视频| 色噜噜狠狠一区二区三区300部 | 91大神在线观看入口| 亚洲中文字幕码mv| av色站| 狠狠操2019| 91九色在线观看| 中文无码久久| 91网站在线播放| 国产在线拍揄自揄拍无码福利| 国产手机AV在线| 日韩无码AV一区二区三区| 青娱乐无码| 婷婷深爱五月丁香网| 亚洲色鬼| 国产亚洲欧美在线| 丁香五月婷婷视频| 五月丁香狠狠爱| 成人自拍偷拍视频| 伊大香蕉在线| a4yy午夜福利| 欧美一级片内射| 伊人影院99| 人人妻人人色| 超碰777| 男人天堂亚洲| 亚洲图片欧美色图| 成人A片免费看| 玖玖精品| 六月婷| 蜜桃人妻| 精品久久一区| 婷婷色777777| 黄色a一级| 国产二级片| 丁香花中文字幕| 日皮视频在线免费观看| 国产XXXX| 怡红院一区二区| 99热超碰在线| 亚洲欧美精品AAAAAA片| 美女福利视频| 亚洲黄色成人网站| 欧美成人日韩| 五月天狠狠操| 北条麻妃精品青青久久价格| 亚洲成人视频免费在线观看| 中文在线视频| 手机在线毛片| 日本免费中文字幕| 人人爱人人操人人爽| 97精品人妻一区二区三区在线| 超碰青娱乐| 操BBB操BBB| 国产一二三四区| 亚洲三级片免费观看| 家庭乱伦av| 屌国产精品| 亚洲成人AAAAA| 激情91| 黄91在线观看| 久久国产性爱| 免费AV播放| 日韩成人无码专区| 成人做爰100片免费-百度| 国产成人精品无码区在线| 蜜桃精品视频| 国产成人福利| 99er热精品视频| 高清无码内射视频| 成人av天堂| 免费看黄色电影| 91麻豆精品国产91久久久吃药 | 欧美色就是色| 美国熟妇| 亚洲图片欧美另类| 国产A级黄色片| 久久国际精品| 一道本一区二区三区免费视频| 啪啪啪免费视频| 伊人午夜| 无码视频久久| 免费黄片在线看| 日本黄色视频大全| 国产毛片视频| 成人一区二区在线观看| 影音先锋三级片| 少妇人妻一区二区三区| 国产日皮视频| 婷婷五月综合激情| 人人人人人操| 日韩1234区| 国产毛片一区二区三区| 自慰在线观看网站| 日韩草逼| 在线操逼视频| 激情网五月天| 亚洲中文字幕日韩精品| 99这里只有精品视频| 97超碰自拍| 久久国产劲爆∧v内射| 最新亚洲中文字幕| 欧美成人a| 人妻熟女在线视频| 中文字幕亚洲在线观看| 国产精品久久一区二区三区影音先锋| 日本精品一区二区三区四区的功能| 围内精品久久久久久久久白丝制服| 17c精品麻豆一区二区免费| 国产剧情一区二区| 爱爱一区| 免费的一级片| 亚洲精品久| 成功精品影院| 五月av| 熟女少妇视频| 男人天堂AV片| 高清无码二区| 日韩91在线视频| 中文字幕av久久爽Av| 性爱AV| 日韩熟妇无码中文字幕| 三级操逼| 精品乱子伦一区二区三区| 中文字幕无码A片| 搡BBB| 日韩久久久久| 一区二区三区视频| 亚洲成人综合网站| 免费AV网站观看| 台湾成人在线| 久久高潮| 欧美一级婬片免费视频黄| 午夜视频网站| 亚洲V| 欧美日韩中文在线| 欧美老女人操逼群| 精品一区二区久久久久久久网站 | 亚洲综合图区| 色欲成人网| 在线观看视频一区| 婷婷俺也去| 高清操逼| 无码成人av| 人人摸人人操人人爱| 外国一级片| 成人黄色无码视频| 黑人AV| 欧美伊人大香蕉| 美女中文字幕| 夜夜爽久久精品91| 91蜜桃视频在线观看| 黄片免费网站| 亚洲色图欧美另类| 五月天丁香婷婷视频| 久久久久久亚洲AV无码专区| 日韩精品一区二区亚洲AV观看| 国产精品123| 91丝袜一区在线观看| 天天操天天操天天操天天| 国产色无码网站www色视频| 日韩无码视频一区二区| 性色网站| 国产成人无码精品久在线观看| 3D精品啪啪一区二区免费| 精品天堂| 国产熟睡乱子伦午夜视频_第1集 | 高清无码在线不卡| 亚洲婷婷视频| 99热国产精品| 91av久久| 超碰在线最新| 欧美黄视频| 影音先锋男人资源网| 亚州精品国产精品乱码不99勇敢| 国产一级A片久久久免费看快餐| 麻豆999| 91嫩草欧美久久久九九九| 国产第一精品| 三级不卡视频| 亚洲色久| 婷婷国产视频| 97色在线视频| 婷婷中文字幕| 蜜臀av在线免费观看| 久热最新| 在线视频日韩| 日本色网址| 精品中文字幕在线播放| 久久噜噜噜精品国产亚洲综合| 视频一区二| 亚洲无码门| 97人妻精品一区二区三区视频 | 精品免费一区二区三区四区| 国产精品九九九| 成人毛片100免费观看| 欧美精品久| 大香蕉久| 思思热在线观看视频| 一区二区免费在线观看| 男女日皮视频| 成人啪啪网站| 国产中文字字幕乱码无限| 蜜桃91精品秘入口| 亚洲老鸭窝| 国产成人三级视频| 一区二区在线不卡| 亚洲免费中文字幕| 五月婷视频| 国产精品无码毛片| 欧美成人猛片AAAAAAA| 精品无码一区二区Av蜜桃| 欧美日韩h| 91久色| 一区成人| 波多野吉衣av| 专业操美女视频网站| 成人国产精品视频| 成人在线综合| 黑人中文字幕| 国产又粗又长| 丁香色五月婷婷| 午夜亚洲AⅤ无码高潮片苍井空| 亚洲无码天堂| 女人操逼| 国产精品色情| 西西444WWW无码视频软件| 免费看无码一级A片放24小时| 豆花在线视频| 久操免费在线观看| 韩剧《邻居的妻子》电视剧| 蜜桃av在线| 九九黄色| 中文字幕精品久久久久人妻红杏Ⅰ | 青草视频在线| 成人色综合| 久久不射网站| 久操精品视频| 国产精品无码在线观看| 欧美又粗又大| 黄片网址大全| 亚洲精品无码永久| 无码第一页| 有码一区二区三区| 日本黄色A片免费看| 人人操人人操人人操人人操人人操| 国产免费黄色电影| 国产无码一二三| 中文字幕乱伦视频| 亚洲婷婷丁香| 日韩AV电影在线观看| 蜜臀av一区二区| 亚洲成人午夜电影| 91丨露脸丨熟女精品| 水蜜桃一区二区| 亚洲电影中文字幕| 国产黄色视频免费看| 亚洲AV资源在线| 国产香蕉视频| 黄网在线免费观看| 欧美日韩成人片| 亚洲天堂三级片| 水果派解说A∨无码区| 国产视频网| 四虎永久在线精品| 影音先锋成人在线资源| 97精品人妻一区| np高辣调教视频| 国产黄页| 韩日中文字幕| 爆操欧美| 又爽又黄免费网站97双女| 成人网站在线看| 天天干干| 青娱乐成人在线| 日韩欧美在线免费| 久久精品v| 91在线亚洲| 国产理伦| 欧美伦妇AAAAAA片| 久久久久久免费| 成人A视频| 欧美黄片免费看| 猫咪AV成人永久网站| 特级婬片AAAAAAA级| 欧美日韩一区在线观看| 精品国产一级A片黄毛网站| 亚洲成人少妇老妇a视频在线| 亚洲成人网站在线| 婷婷五月综合在线| AV怡红院| 精品成人av| 成人性视频Aⅴ| 欧美精品一区二区三区成人片在线 | 欧美一区二区三区成人片在线| 17c白丝喷水自慰| 亚洲五月六月| 欧美一级黄色性爱视频| 国产高潮视频| 一本道高清| 国产成人无码AⅤ片免费播放| 人人摸人人看人人草| 91精品国产一区二区三区四区大| 日韩精品欧美一区二区三区 | 青青草成人在线观看| 日韩欧美成人网| 波多野结衣无码NET,AV| 99热在线播放| 成人做爰A片AAA毛真人| 亚洲最大无码| 中文字幕无码人妻在线视频| 乱伦婷婷| 欧美一级免费视频| 欧美日韩高清一区| 亚洲天媒在线播放| 无码人妻一区二区| 中文字幕乱码中文字乱码影响大吗 | 国产婬片一级A片AAA毛片AⅤ| 午夜福利啪啪啪| 欧美成人精品欧美一级乱黄| 人妻少妇无码视频| 超碰2025| 涩五月婷婷| 日本69AV| www.操逼网| 69视频在线观看免费| 无码av无码AV| 国产福利AV| 蜜芽av在线| 久久精品一区二区三区蜜芽的特点| 91看片看婬黄大片| 成人婷婷五月天| 在线a视频免费观看| 日日碰狠狠躁久久躁婷婷| 成人免费区一区二区三区| 国产一级在线观看| 亚洲无码免费观看视频| 国产XXXXX| 91免费成人| 欧美毛片在线观看| 国产成人大香蕉| 蜜臀AV在线观看| 西西人体444www| 五月天堂婷婷| 欧洲肥胖BBBBBBBBBB| 亚洲国产成人精品女人久久久| 日韩一区二区三区视频| 懂色av,蜜臀AV粉嫩av| 西西4444WWW无码精品| 国产精品国三级国产a11| 久久久五月| 亚洲vs无码秘蜜桃| 97资源在线视频| 人妻久操| 中文无码高清在线| 最新久欠一区二区免费看| 大香蕉现在视频中心一| 青草福利视频| 国产成人秘免费观看一区二区三区 | 国产九九精品| 欧美AAAAAA视频| 无码乱伦| 国产黄网| www.麻豆网91成人久久久| 亚洲成人精品在线观看| 国产黄A片免费网站免费| 久久AV影院| 成人动漫一区二区| 日韩精品一区二区三区中文在线 | 三级片视频网址| 大香蕉在8线| 欧美女人日逼视频| 国产精品国产三级国产AⅤ中文 | 亚洲一级黄色电影| 一级黄色片免费看| 少妇搡BBBB搡BBBB毛多多| 成人做爰黄A片免费看陈冠| 丁香五月婷婷综合| 丰满人妻一区二区三区蜜桃视频| 欧美成人第一页| 精品久久成人| 亚洲无线视频| 韩日AV| 亲子伦视频一区二区三区| 97人妻人人澡人| 丁香激情五月少妇| 乱伦AV片| 青青草乱伦视频| 欧美视频h| 啪啪免费网| 免费的黄片| 热九九热| 最近中文字幕无码| 91婷婷射| 国产天堂在线观看| 亚洲三级在线免费观看| 国产探花一区二区三区| 日本一级片免费看| 开心黄色网| 亚洲视频在线观看网站| 中文字幕永久在线视频| 最近最火中文字幕mv歌词| 成人18视频| 久久一级A片| 台湾中文字幕网| 怡红院一区二区| 久久免费视频网站| 亚洲瑟瑟| 韩国gogogo高清在线完整版| 丝袜久久| 国产九九九视频| 久久艹伊人| 国产中文字幕av| 四川BBB嫩BBBB爽BBBB| 亚洲无码专区视频| 中文字幕A片| 日韩爆乳一区二区三区| 天天日,天天干,天天操| 婷婷久久在线| 一道本无码在线观看| 欧美A片在线播放| 日本三级黄色| 午夜福利三级| 亚洲中文字幕影院| 水蜜桃91| 加勒比无码高清| 欧美激情五月天| 日韩成人中文字幕| 欧亚毛片| 五月天激情小说| 国产一级A片| 成人视频123| 做爱的网站| 亚洲成人免费在线视频| 免费AV播放| 激情五月天色色| 成人在线日韩| 亚洲在线一区二区| 日韩AV中文字幕在线播放| 男女乱伦视频| 插插插菊花综合网| 夜操| 人人爽人人| 日本久久网站| 日本中文字幕电影| 激情欧美| 黑人操逼| 在线亚洲福利| 五月婷婷免费视频| 中文字幕无吗| 人人摸人人看人人| 国产三级一区二区| 无码人妻在线播放| 国产69精品久久久久久| 欧美一区二区在线视频| 影音先锋资源站| 黑人丰满大荫蒂| 大香蕉久草| 操逼视频在线观看| 亚洲av成人网| 欧美一级AAA大片免费观看| 水果派红桃AV解说| 少妇久久久久久久久久| 亚洲男人的天堂av| 无码日韩人妻精品久久蜜桃| 18禁激韩| 亚洲精品国产精品国自产曰本 | 天天干强奸视频在线综合| 久草视频免费在线播放| 人人操人人妻人人| 青青综合网| 无码欧美成人AAAA三区在线| 日韩亚洲中文字幕| 婷婷亚洲色| 婷婷五月天综合网| 亚洲人妻中文字幕| 国产曰韩欧美综合另类在线| 亚洲天堂av在线免费观看| 91成人在线影院| 人妻HDHDHD96XXXX| 亚洲无码资源| 蜜臀av一区二区| 国产黄色视频免费观看| 激情操逼| 成人一级精品| 人妻少妇中文字幕久久牛牛| 婷婷综合av| 国产aⅴ| 尤物精品在线| 久久停停| 亚洲视频在线看| 日韩三区| 麻豆午夜福利| 国产精品乱码一区二区三区| 亚洲一区二区久久| 国产精品无码免费视频| 色六月婷婷| 大香蕉久久爱| 欧美午夜精品| 天堂v在线观看| 午夜av电影| 中文字幕VA| 91AV成人| 成人午夜视频在线观看| 在线播放你懂的| 女人自慰网站在线观看| 美女十八禁| 人人干人人妻| 1024在线| 蜜桃av在线播放| 毛片网站在线观看| 国产P片内射天涯海角| 国产精品一区二区黑人巨大| 爱搞搞搞搞| 免费视频无码| 中文字幕免费看| 亚洲欧洲在线视频| 国产免费成人| 一级特黄大片录像i| 青青草小视频| 蜜桃久久久亚洲精品| 自慰精品| 久久久成人电影| 高清毛片AAAAAAAAA片| 亚欧精品久久久| 亚洲A片V一区二区三区| 97人妻视频| 中文字幕在线观看一区| 国产另类自拍| 日韩黄色精品| 亚洲激情图| 在线观看黄色AV| 久久机热| 尤物综合网| 久久精品视频国产| 婷婷国产在线| 操一操影院| 久久无码电影| 天天干天天色天天射| 天天爽夜夜爽夜夜爽精品| 蜜臀精品一区二区三区| 国产欧美日韩在线观看| 狠狠爱一区| 在线播放毛片| 国产日女人| 人妻二区| 爽好紧别夹喷水欧美| 久久系列观看完整指南| 日韩无码一二三区| 国产一区二区三区在线观看免费视频免费视频免费视频 | 成人亚洲视频| 中文字幕无码av| 日韩一级爱爱| 成av人片一区二区三区久久| 国产精品揄拍500视频| 在线观看者亚洲| 国产香蕉视屏| 午夜性爱网址| 激情六月丁香| 在线免费观看黄色电影| 伊人久久福利视频| 亚洲操逼AV| 免费黄色视频在线| 人人澡人人干| 亚洲高清无码视频| 久久国产日韩| 亚洲无码在线播放视频| av无码观看| 美女一级变态毛片| 亚洲日本中文字幕在线观看| 成人黄色免费看| 日韩无码一区二区三区四区| 狠狠干亚洲视频| 成人中文字幕在线视频| 成人免费视频国产在线观看| 欧美一级片在线| 日韩人妻无码一区二区三区中文| 国产3p绿帽骚妻视频| 亚洲乱码中文字幕| 性爱视频免费网站| 国产精品伦理| 熟女高潮| 操久| 亚洲一区二区三区无码| 成人黄色视频网| 伊人在线视频观看| 麻豆精品在线| 俺来也官网欧美久久精品| 永久中文字幕| 操一区| 丁香五月在线视频| 亚洲女人天堂AV| 欧美操逼在线| 亚洲在线无码视频| 小佟丽娅大战91哥| 99热这里是精品| 色婷婷在线观看视频| 午夜免费福利| 干少妇视频| 国产精品中文| 爱操视频| 爱逼爱操| www免费视频在线观看播放| 逼网站| 婷婷五月999| 日韩精品丰满无码一级A片∴| 伊人999| 天天操天天干欧美精品| 亚洲无码中文视频| 国产综合久久久7777777| www.中文字幕| 伊人久久AV| 国产aⅴ激情无码久久久无码| 做爱网站| 国产视频97| 日韩成人一区二区| 欧美性爱网址| 少妇喷水在线观看| 天天弄天天操| 在线观看A片| 国产一级二级三级久久久| 丰满人妻一区二区| 日本免费黄色视频| 国产精品成| 91调教视频| 国产精品三级| 18禁网站免费观看| 日本激情视频| 国产乱伦不卡| 91三级片网站| 亚洲精品成人无码毛片| 999成人电影| 无码电影免费观看| 久久久久无码精品亚洲日韩| 婷婷激情中文字幕| 婷婷国产精品视频| 亚洲精品国产精品国自产在线| 欧美一区电影| 成人做爰黄A片免费视频网站野外| 五月天婷婷在线观看| 国产高潮视频在线观看| 操逼网首页123| 久久久在线| 99re视频在线播放| 91视频专区| 亚洲激情黑人| 日韩欧美亚洲一区二区三区| 四川乱子伦95视频国产| 好吊视频一区二区三区红桃视频you | 国产永久精品| 久久久影院| 成人无码影院日韩,成人年… | 西西4444WWW无码精品| 色婷婷一区二区三区四区五区精品视| 激情综合在线| 精品毛片| AV无码资源| 91精品久久久久久久久久| 国产裸体美女网站| 少妇高潮一区二区三区99| 影音先锋av中文字幕| 日韩三级AV在线观看| www.199麻豆在线观看网站| 97资源超碰| zzjicom| 亚洲天堂AV网| 超碰在线免费| 日本黄色免费在线观看| 亚洲中文字幕一区二区| 国产激情内射| 黄色视频在线网站| 日韩一级视频| 啊啊啊啊啊在线观看| 熟女人妻人妻HD|