Vue-CLI - Aufzeichnung der Schritte zur mehrseitigen Verzeichnisverpackung

Vue-CLI - Aufzeichnung der Schritte zur mehrseitigen Verzeichnisverpackung

Seitenverzeichnisstruktur

Beachten Sie, dass Sie die Standard-HTML-Vorlagendatei public/index.html in das Stammverzeichnis verschieben müssen.

Abhängigkeiten installieren

npm i --save-dev umgebungsübergreifende Taskdatei

build/pages.js

Holen Sie sich das von Vue CLI benötigte mehrseitige Objekt

const Pfad = require('Pfad')
const glob = erfordern('glob')
const fs = erfordern('fs')

const isProduction = process.env.NODE_ENV === 'Produktion'

// Seitentitel für verschiedene Module anpassen
const TitelMap = {
  Index: 'Startseite'
}

Funktion getPages (globPath) {
  const Seiten = {}
  glob.sync(globPath).forEach((item) => {
    const stats = fs.statSync(Element)
    wenn (stats.isDirectory()) {
      const basename = Pfad.basename(Element, Pfad.extname(Element))

      // Wenn sich die Datei „index.html“ im Modulverzeichnis befindet, verwenden Sie diese Datei als HTML-Vorlagendatei const template = fs.existsSync(`${item}/index.html`)
        ? `${item}/index.html`
        : Pfad.beitreten(__Verzeichnisname, '../index.html')

      Seiten[Basisname] = {
        Eintrag: `${item}/main.js`,
        Titel: titleMap[Basisname] || 'Standardseite',
        Vorlage,
        // Diese Codezeile ist sehr wichtig // Kompatibel mit Entwicklung und Produktion. Die HTML-Seitenhierarchie ist konsistenter Dateiname: isProduction ? 'index.html' : `${basename}/index.html`
      }
    }
  })
  Zurück zu den Seiten
}

const Seiten = getPages(Pfad.join(__dirname, '../src/pages/*'))

module.exports = Seiten

build/index.js

Führen Sie den Build-Befehl aus und führen Sie eine Schleife des vue-cli-service-Builds aus.

const Kreide = erforderlich('Kreide')
const rimraf = erfordern('rimraf')
const { sh } = erfordern('Aufgabendatei')

const PAGES = erfordern('./pages')

// vue-cli-service --mode-Wert const mode = process.env.MODE || 'prod'

// Modulname, kann mehrere sein const moduleNames = process.argv[2]

// Liste aller Seiten const pageList = Object.keys(PAGES)

// Wenn die gültige Modulliste nicht angegeben ist, wird die Liste aller Seiten verwendet. const validPageList = moduleNames ? moduleNames.split(',').filter((item) => pageList.includes(item)) : pageList
wenn (!validPageList.length) {
  console.log(chalk.red('**Modulname ist falsch**'))
  zurückkehren
}

console.log(chalk.blue(`Gültiges Modul:${validPageList.join(',')}`))

// Lösche das Verzeichnis „dist“ rimraf.sync('dist')

console.time('Gesamtkompilierungszeit')
const count = gültigeSeitenliste.Länge
lass Strom = 0
// Führe die Kompilierung der Module nacheinander aus for (let i = 0; i < validPageList.length; i += 1) {
  const Modulname = gültigeSeitenliste[i]
  process.env.MODULE_NAME = Modulname

  console.log(chalk.blue(`${moduleName}-Modul hat mit der Kompilierung begonnen`))

  // Kompilieren über vue-cli-service build sh(`vue-cli-service build --mode ${mode}`, { async: true }).then(() => {
    console.log(chalk.blue(`Kompilierung des Moduls ${moduleName} abgeschlossen`))
    konsole.log()
    Strom += 1
    wenn (aktuell === Anzahl) {
      console.log(chalk.blue('-----Alle Module kompiliert-----'))
      console.timeEnd('Gesamtkompilierungszeit')
    }
  })
}

build/dev-modules.js

Passen Sie das Modul an, das für die lokale Entwicklung kompiliert werden muss. Der Modulname ist der Ordnername unter src/pages.

// Module, die für die lokale Entwicklung kompiliert werden müssen module.exports = [

]

vue.config.js

const Kreide = erforderlich('Kreide')

const devModuleList = erfordern('./build/dev-modules')

const isProduction = process.env.NODE_ENV === 'Produktion'

//Gesamtzahl der Seiten const PAGES = require('./build/pages')

für (const basename in PAGES) {
  wenn (Object.prototype.hasOwnProperty.call(PAGES, Basisname)) {
    PAGES[Basisname].chunks = [
      „Chunk-Ansicht“,
      'Chunk-Anbieter',
      'Chunk-Common',
      `${Basisname}`
    ]
  }
}

let Seiten = {}
const moduleName = prozess.umgebung.MODULE_NAME

wenn (istProduktion) {
  // Erstelle den Namen des Moduls if (!PAGES[moduleName]) {
    console.log(chalk.red('**Modulname ist falsch**'))
    zurückkehren
  }
  Seiten[Modulname] = SEITEN[Modulname]
} anders {
  // Lokales Entwicklungskompilierungsmodul // Alles kompilieren if (process.env.DEV_MODULE === 'all') {
    Seiten = SEITEN
  } anders {
    // Einige Module kompilieren const moduleList = [
      // Das kompilierte Modul „index“ wurde repariert.
      'Login',
      // Benutzerdefiniert kompilierte Module ... devModuleList
    ]
    moduleList.forEach(item => {
      Seiten[Element] = SEITEN[Element]
    })
  }
}

modul.exporte = {
  // Diese Codezeile ist sehr wichtig publicPath: isProduction ? './' : '/',
  Seiten,
  // Diese Codezeile ist sehr wichtig outputDir: isProduction ? `dist/${moduleName}` : 'dist',
  productionSourceMap: false,
  css: {
    loaderOptions: {
      sass: {
        prependData: '@import "~@/styles/variables.scss";'
      }
    }
  },
  chainWebpack: (Konfiguration) => {
    config.optimization.splitChunks({
      CacheGruppen:
        Ansicht: {
          Name: "Chunk-Vue",
          Test: /[\\/]Knotenmodule[\\/]_?(vue|vue-router|vuex|element-ui)(@.*)?[\\/]/,
          Priorität: -1,
          Brocken: ‚initial‘
        },
        Anbieter:
          Name: 'Chunk-Vendors',
          Test: /[\\/]node_modules[\\/]/,
          Priorität: -10,
          Brocken: ‚initial‘
        },
        gemeinsam:
          Name: "chunk-common",
          minChunks: 2,
          Priorität: -20,
          Stücke: "initial",
          reuseExistingChunk: true
        }
      }
    })
  }
}

Paket.json

{
  "Skripte": {
    "dienen": "vue-cli-service dienen",
    "serve:all": "umgebungsübergreifendes DEV_MODULE=alle Vue-CLI-Service-Serve",
    "build:test": "cross-env MODE=Testknotenbuild/index.js",
    "build:prod": "umgebungsübergreifender MODUS=prod-Knotenbuild/index.js",
    "lint": "Vue-CLI-Service-Lint",
  }
}

Lokale Entwicklung

Bei der lokalen Entwicklung kompiliert npm run serve ein benutzerdefiniertes Modulverzeichnis und npm run serve:all kompiliert alle Modulverzeichnisse.

Die Verzeichnisstruktur nach der Kompilierung während der lokalen Entwicklung sieht wie folgt aus:

Daher müssen Sie nach dem Start die Adresse in http://localhost:8080/index/index.html ändern.

Verpackungsergebnisse

Beim Erstellen verpackt npm run build:prod alle Seiten und npm run build:prod index verpackt nur die Indexseite.

Die gepackte Verzeichnisstruktur ist wie folgt:

Auf diese Weise können Sie beim Springen zwischen verschiedenen Modulen eine konsistente relative Pfadsprungmethode verwenden: ../index/index.html.

Nach dem Verpacken wird der Inhalt jedes Moduls in ein separates Verzeichnis gepackt.

Github-Adresse

Zusammenfassen

Dies ist das Ende dieses Artikels über die Vue-CLI-Verzeichnispaketierung mit mehreren Seiten. Weitere relevante Inhalte zur Vue-CLI-Verzeichnispaketierung mit mehreren Seiten finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Informationen zu Optimierungspunkten für die Vue-CLI 3-Konfigurationsverpackung (empfohlen)
  • Detaillierte Erläuterung der Vue-CLI3-Verpackungskonfiguration für mehrere Umgebungen
  • Lösen Sie das Problem zu großer Vendor-Dateien nach der Vue-CLI-Gerüstverpackung
  • Die Fallstricke bei der Verwendung von HBuilderx zum Verpacken von Apps in Vue-CLI
  • So verwenden Sie Electron, um das Vue-CLI-Projekt in eine EXE-Datei zu verpacken
  • Lösung für den Fehler im gepackten Bildpfad in vue-cli
  • Ein Beispiel zum Verpacken und Starten von vue-cli
  • Beispiel für Umgebungsvariablen und Umgebungspaketierung von vue-cli3

<<:  Ideen und Methoden zur inkrementellen Sicherung einer MySQL-Datenbank

>>:  Tutorial zur Konfiguration und Verwendung des MySQL-Protokolls für langsame Abfragen

Artikel empfehlen

JavaScript-Sandbox-Erkundung

Inhaltsverzeichnis 1. Szenario 2. Grundfunktionen...

Detaillierte Erklärung des Unterschieds zwischen Vue-Lebenszyklus

Lebenszyklusklassifizierung Jede Komponente von V...

Probleme mit Index und FROM_UNIXTIME in MySQL

Null, Hintergrund Ich habe diesen Donnerstag viel...

Der Unterschied zwischen den Größen- und Maxlength-Attributen von Input

Ich habe kürzlich die Attribute „input size“ und „...

Detaillierte Erklärung der CSS3-Textschatteneigenschaft Textschatten

Textschatten-Textschatten-Eigenschaftseffekte: 1....

CSS-Code zum Erstellen von 10 modernen Layouts

Vorwort Ich habe mir am Sonntag zu Hause das drei...

So verwenden Sie den JS-Code-Compiler Monaco

Vorwort Meine Anforderungen sind Syntaxhervorhebu...

Detaillierte Erklärung des JavaScript-Stacks und der Kopie

Inhaltsverzeichnis 1. Definition des Stapels 2. J...

Lösung für den ES-Speicherüberlauf beim Starten von Docker

Fügen Sie die Datei jvm.options zur Elasticsearch...

Implementieren einer verteilten Sperre mit MySQL

einführen In einem verteilten System ist die vert...

Vue integriert Tencent TIM Instant Messaging

In diesem Artikel wird hauptsächlich die Integrat...

Detaillierter Vue-Code zur Implementierung der Shuttle-Box-Funktion

Vue - Implementierung der Shuttle-Box-Funktion. D...