目次
步骤
开发
一、初始化项目
ホームページ ウェブフロントエンド jsチュートリアル Vue フロントエンド アーキテクチャの学習 (1)

Vue フロントエンド アーキテクチャの学習 (1)

Feb 02, 2018 pm 01:53 PM
フロントエンド 勉強 建築

この記事では、Vue フロントエンド アーキテクチャの学習 (1) を主に共有します。これは、皆様のお役に立てれば幸いです。

考えてみれば、私はすでに多くのアーキテクチャ プロジェクトを行っており、その中には vue ベース、react ベース、thinkPHP ベース、laravel ベースのものもあります。やりすぎると、既存のアーキテクチャについてさまざまな考えが生まれ、良い点もあれば悪い点も出てきます。つまり、まだ使い心地が良くありません。 vue-cli (特に vue-cli v3.0) はすぐに構築して使用できますが、webpack は @vue/cli の SDK に封入されているため、よりクリーンで簡潔に使用できます。 @vue/cli的sdk里了,用起来更加干净、简洁。

好了,介绍完毕,接下来,我就从零开始,一步一步建起前后端完全分离的前端架构了。

步骤

由于要介绍的很多,全写在一篇里,有些太长了。

所以,我会分为:

  1. 创建开发环境下的webpack配置文件

  2. 配置eslint、babel、postcss

  3. 创建项目文件、目录架构

  4. 通过koa实现本地数据接口模拟

  5. 创建发布环境下的webpack配置文件

  6. 创建测试环境下的webpack配置文件、以及测试用例 (TODO)

  7. 自动初始化构建项目(TODO)

这七篇来分别介绍。

开发

一、初始化项目

  1. 创建项目文件夹

我们就叫vue-construct

  1. 初始化git

git init

  1. 初始化npm

npm init

  1. 创建项目文件

为了能让webpack跑起来,而不是一口气只讲配置而不运行一下,那样未免有些空洞,所以我们先创建一点项目文件和目录。
在这之前我们先安装两个包:vue、vue-router, npm i -S vue vue-router
我们将项目代码相关文件都放在名为app

さて、導入は終わりました。次に、ゼロから始めて、フロントエンドとバックエンドを完全に分離したフロントエンドアーキテクチャを段階的に構築していきます。

手順紹介するものがたくさんあるので、少し長くなってしまったので1つの記事にまとめて書きます。 開発環境でwebpackの設定ファイルを作成 プロジェクトファイルとディレクトリ構造の作成 テスト環境でWebpack設定ファイルを作成し、テストケース(TODO)npmを初期化します webpackを実行するには、設定について一度に話すのではなく、実行すると少し空になるので、最初にいくつかのプロジェクト ファイルとディレクトリを作成しましょう。
この前に、まず vue と vue-router の 2 つのパッケージ、npm i -S vue vue-router をインストールします。
すべてのプロジェクト コード関連ファイルは、app という名前のフォルダーに配置します。まずは全部作ってから、一つずつ紹介していきます。
├── app
│   ├── app.vue
│   ├── common
│   │   ├── img
│   │   ├── js
│   │   └── scss
│   ├── index.html
│   ├── index.js
│   ├── router
│   │   └── index.js
│   └── views
│       └── home
│           └── index.vue
├── .gitignore
├── package-lock.json
├── package.json
└── webpack.config.js
ログイン後にコピー
ということで、
eslint、babel、postcssの設定
ローカルデータの実装koaインターフェイスシミュレーションによる
リリース環境でWebpack設定ファイルを作成
ビルドプロジェクトの自動初期化(TODO)
この7つ それぞれの記事を個別にご紹介します。 developments1。
npm init
プロジェクトファイルを作成します
node_modules は無視されます。

    ファイル/フォルダー
  1. 目的

app.vue

vueのメインファイルとして

common

公開コードを入れる

  1. index.html

  2. ページテンプレートファイル

index.js

    プロジェクトメインエントリファイル
  1. router
  2. vueに対応するルーターファイルを置く

  3. views

  4. ビューファイルを置く

.gitignore node_module を無視する

🎜 🎜🎜🎜今のところ、これらのファイル内の特定のコードについては気にしません。それについては、webpack が設定された後に説明します。 🎜🎜2. webpack.config.js を設定します🎜🎜🎜🎜一連のパッケージをインストールします: 🎜🎜🎜🎜webpack を実行するには、🎜
webpack
webpack-dev-server
ログイン後にコピー
をインストールする必要があります🎜 vue 単一ページ ファイルを処理するには、次をインストールします: 🎜
vue-loader
ログイン後にコピー
🎜 scss ファイルを処理し、js から抽象化するには、次をインストールします: 🎜
node-sass
style-loader
css-loader
sass-loader
vue-style-loader
postcss
postcss-loader
autoprefixer
extract-text-webpack-plugin
ログイン後にコピー
🎜 画像とフォント ファイルを処理するには、次をインストールします: 🎜
file-loader
url-loader
ログイン後にコピー
🎜 高度な syntax-babel をサポートするには、次をインストールします: 🎜
babel
babel-loader
babel-plugin-syntax-dynamic-import
babel-plugin-transform-object-rest-spread
babel-polyfill
babel-preset-env
ログイン後にコピー
🎜 検証するにはcode format-eslint、インストール: 🎜
eslint
eslint-loader
eslint-plugin-html
babel-eslint
ログイン後にコピー
🎜🎜🎜 webpack.config.js ファイルの構成🎜🎜🎜
const webpack = require('webpack')
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
// 为了抽离出两份CSS,创建两份ExtractTextPlugin
// base作为基础的css,基本不变,所以,可以抽离出来充分利用浏览器缓存
// app作为迭代的css,会经常改变
const isProduction = process.env.NODE_ENV === 'production'
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const extractBaseCSS =
  new ExtractTextPlugin(
    {
      filename:'static/css/base.[chunkhash:8].css',
      allChunks: true,
      disable: !isProduction // 开发环境下不抽离css
    }
  )
const extractAppCSS
  = new ExtractTextPlugin(
    {
      filename:'static/css/app.[chunkhash:8].css',
      allChunks: true,
      disable: !isProduction // 开发环境下不抽离css
    }
  )

// 减少路径书写
function resolve(dir) {
  return path.join(__dirname, dir)
}

// 网站图标配置
const favicon = resolve('favicon.ico')

// __dirname: 总是返回被执行的 js 所在文件夹的绝对路径
// __filename: 总是返回被执行的 js 的绝对路径
// process.cwd(): 总是返回运行 node 命令时所在的文件夹的绝对路径
const config = {
  // sourcemap 模式
  devtool: 'cheap-module-eval-source-map',
  // 入口
  entry: {
    app: [
      'babel-polyfill', // 这里是配合babel-present-env导入的动态babel-polyfill,因此npm需dev依赖
      resolve('app/index.js')
    ]
  },
  // 输出
  output: {
    path: resolve('dev'),
    filename: 'index.bundle.js'
  },
  resolve: {
    // 扩展名,比如import 'app.vue',扩展后只需要写成import 'app'就可以了
    extensions: ['.js', '.vue', '.scss', '.css'],
    // 取路径别名,方便在业务代码中import
    alias: {
      api: resolve('app/api/'),
      common: resolve('app/common/'),
      views: resolve('app/views/'),
      components: resolve('app/components/'),
      componentsBase: resolve('app/componentsBase/'),
      directives: resolve('app/directives/'),
      filters: resolve('app/filters/'),
      mixins: resolve('app/mixins/')
    }
  },
  // loaders处理
  module: {
    rules: [
      {
        test: /\.js$/,
        include: [resolve('app')],
        loader: [
          'babel-loader',
          'eslint-loader'
        ]
      },
      {
        test: /\.vue$/,
        exclude: /node_modules/,
        loader: 'vue-loader',
        options: {
          extractCSS: true,
          loaders: {
            scss: extractAppCSS.extract({
              fallback: 'vue-style-loader',
              use: [
                {
                  loader: 'css-loader',
                  options: {
                    sourceMap: true
                  }
                },
                {
                  loader: 'postcss-loader',
                  options: {
                    sourceMap: true
                  }
                },
                {
                  loader: 'sass-loader',
                  options: {
                    sourceMap: true
                  }
                }
              ]
            })
          }
        }
      },
      {
        test: /\.(css|scss)$/,
        use: extractBaseCSS.extract({
          fallback: 'style-loader',
          use: [
            {
              loader: 'css-loader',
              options: {
                sourceMap: true
              }
            },
            {
              loader: 'postcss-loader',
              options: {
                sourceMap: true
              }
            },
            {
              loader: 'sass-loader',
              options: {
                sourceMap: true
              }
            }
          ]
        })
      },
      {
        test: /\.(png|jpe?g|gif|svg|ico)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 8192,
          name: isProduction
            ? 'static/img/[name].[hash:8].[ext]'
            : 'static/img/[name].[ext]'
        }
      },
      {
        test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
        loader: 'url-loader',
        options: {
          limit: 8192,
          name: isProduction
            ? 'static/font/[name].[hash:8].[ext]'
            : 'static/font/[name].[ext]'
        }
      }
    ]
  },
  plugins: [
    // html 模板插件
    new HtmlWebpackPlugin({
      favicon,
      filename: 'index.html',
      template: resolve('app/index.html')
    }),
    // 抽离出css
    extractBaseCSS,
    extractAppCSS,
    // 热替换插件
    new webpack.HotModuleReplacementPlugin(),
    // 更友好地输出错误信息
    new FriendlyErrorsPlugin()
  ],
  devServer: {
    proxy: {
      // 凡是 `/api` 开头的 http 请求,都会被代理到 localhost:7777 上,由 koa 提供 mock 数据。
      // koa 代码在 ./mock 目录中,启动命令为 npm run mock。
      '/api': {
        target: 'http://localhost:7777', // 如果说联调了,将地址换成后端环境的地址就哦了
        secure: false
      }
    },
    host: '0.0.0.0',
    port: '9999',
    disableHostCheck: true, // 为了手机可以访问
    contentBase: resolve('dev'), // 本地服务器所加载的页面所在的目录
    // historyApiFallback: true, // 为了SPA应用服务
    inline: true, //实时刷新
    hot: true  // 使用热加载插件 HotModuleReplacementPlugin
  }
}

module.exports = {
  config: config,
  extractBaseCSS: extractBaseCSS,
  extractAppCSS: extractAppCSS
}
ログイン後にコピー
🎜概要🎜🎜この記事では主に 3 つのことを行います:🎜🎜🎜🎜 簡単なプロジェクト構造を作成する🎜🎜🎜🎜インストール後この記事と後で npm を使用する パッケージ 🎜🎜🎜🎜開発環境用に Webpack を構成する🎜🎜🎜🎜 関連する推奨事項: 🎜🎜🎜VUE フロントエンド Cookie 簡単な操作例の共有🎜🎜

以上がVue フロントエンド アーキテクチャの学習 (1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

1.3ミリ秒には1.3ミリ秒かかります。清華社の最新オープンソース モバイル ニューラル ネットワーク アーキテクチャ RepViT 1.3ミリ秒には1.3ミリ秒かかります。清華社の最新オープンソース モバイル ニューラル ネットワーク アーキテクチャ RepViT Mar 11, 2024 pm 12:07 PM

論文のアドレス: https://arxiv.org/abs/2307.09283 コードのアドレス: https://github.com/THU-MIG/RepViTRepViT は、モバイル ViT アーキテクチャで優れたパフォーマンスを発揮し、大きな利点を示します。次に、この研究の貢献を検討します。記事では、主にモデルがグローバル表現を学習できるようにするマルチヘッド セルフ アテンション モジュール (MSHA) のおかげで、軽量 ViT は一般的に視覚タスクにおいて軽量 CNN よりも優れたパフォーマンスを発揮すると述べられています。ただし、軽量 ViT と軽量 CNN のアーキテクチャの違いは十分に研究されていません。この研究では、著者らは軽量の ViT を効果的なシステムに統合しました。

Spring Data JPA のアーキテクチャと動作原理は何ですか? Spring Data JPA のアーキテクチャと動作原理は何ですか? Apr 17, 2024 pm 02:48 PM

SpringDataJPA は JPA アーキテクチャに基づいており、マッピング、ORM、トランザクション管理を通じてデータベースと対話します。そのリポジトリは CRUD 操作を提供し、派生クエリによりデータベース アクセスが簡素化されます。さらに、遅延読み込みを使用して必要な場合にのみデータを取得するため、パフォーマンスが向上します。

PHP と Vue: フロントエンド開発ツールの完璧な組み合わせ PHP と Vue: フロントエンド開発ツールの完璧な組み合わせ Mar 16, 2024 pm 12:09 PM

PHP と Vue: フロントエンド開発ツールの完璧な組み合わせ 今日のインターネットの急速な発展の時代において、フロントエンド開発はますます重要になっています。 Web サイトやアプリケーションのエクスペリエンスに対するユーザーの要求がますます高まっているため、フロントエンド開発者は、より効率的で柔軟なツールを使用して、応答性の高いインタラクティブなインターフェイスを作成する必要があります。フロントエンド開発の分野における 2 つの重要なテクノロジーである PHP と Vue.js は、組み合わせることで完璧なツールと見なされます。この記事では、PHP と Vue の組み合わせと、読者がこれら 2 つをよりよく理解し、適用できるようにするための詳細なコード例について説明します。

Wordでルート番号を入力する方法を一緒に学びましょう Wordでルート番号を入力する方法を一緒に学びましょう Mar 19, 2024 pm 08:52 PM

Word でテキスト コンテンツを編集するときに、数式記号の入力が必要になる場合があります。 Word でルート番号を入力する方法を知らない人もいるので、Xiaomian は私に、Word でルート番号を入力する方法のチュートリアルを友達と共有するように頼みました。それが私の友達に役立つことを願っています。まず、コンピュータで Word ソフトウェアを開き、編集するファイルを開き、ルート記号を挿入する必要がある場所にカーソルを移動します。下の図の例を参照してください。 2. [挿入]を選択し、記号内の[数式]を選択します。下の図の赤丸で示すように: 3. 次に、下の[新しい数式を挿入]を選択します。以下の図の赤丸で示すように: 4. [根号式]を選択し、適切な根号を選択します。下の図の赤丸で示したように、

Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか? Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか? Jun 05, 2024 pm 06:59 PM

Go フレームワーク アーキテクチャの学習曲線は、Go 言語とバックエンド開発への慣れ、選択したフレームワークの複雑さ、つまり Go 言語の基本の十分な理解によって決まります。バックエンドの開発経験があると役立ちます。フレームワークの複雑さが異なると、学習曲線も異なります。

Llama3 レイヤー 1 を手動でティアリングする: llama3 を最初から実装する Llama3 レイヤー 1 を手動でティアリングする: llama3 を最初から実装する Jun 01, 2024 pm 05:45 PM

1. Llama3 のアーキテクチャ このシリーズの記事では、llama3 を最初から実装します。 Llama3 の全体的なアーキテクチャ: Llama3 のモデル パラメーターをイメージします: Llama3 モデルのこれらのパラメーターの実際の値を見てみましょう。図[1] コンテキストウィンドウ (context-window) LlaMa クラスをインスタンス化する際、変数 max_seq_len によって context-window が定義されます。クラスには他にもパラメータがありますが、このパラメータは変圧器モデルに最も直接関係しています。ここでの max_seq_len は 8K です。図[2] 語彙サイズと注意力L

Go 言語のフロントエンド テクノロジーの探求: フロントエンド開発の新しいビジョン Go 言語のフロントエンド テクノロジーの探求: フロントエンド開発の新しいビジョン Mar 28, 2024 pm 01:06 PM

Go 言語は、高速で効率的なプログラミング言語として、バックエンド開発の分野で広く普及しています。ただし、Go 言語をフロントエンド開発と結びつける人はほとんどいません。実際、フロントエンド開発に Go 言語を使用すると、効率が向上するだけでなく、開発者に新たな視野をもたらすことができます。この記事では、フロントエンド開発に Go 言語を使用する可能性を探り、読者がこの分野をよりよく理解できるように具体的なコード例を示します。従来のフロントエンド開発では、ユーザー インターフェイスの構築に JavaScript、HTML、CSS がよく使用されます。

Go言語のmain関数をゼロから学ぶ Go言語のmain関数をゼロから学ぶ Mar 27, 2024 pm 05:03 PM

タイトル: Go言語のmain関数をゼロから学ぶ Go言語はシンプルで効率的なプログラミング言語として開発者に好まれています。 Go 言語では、main 関数はエントリ関数であり、すべての Go プログラムにはプログラムのエントリ ポイントとして main 関数が含まれている必要があります。この記事ではGo言語のmain関数をゼロから学ぶ方法と具体的なコード例を紹介します。 1. まず、Go 言語開発環境をインストールする必要があります。公式ウェブサイト (https://golang.org) にアクセスできます。

See all articles