ホームページ >運用・保守 >Linuxの運用と保守 >Vue cli リファクタリングの複数ページのスキャフォールディングのサンプル共有
公式に提供されているプロジェクト生成ツール vue-cli は複数ページの WebApp をサポートしていませんが、実際のプロジェクトではそのようなスキャフォールディングが必要です。多くの専門家の方法を参考にした後、この記事では私の単一ページのスキャフォールディングを変換します。参照用の複数ページのスキャフォールディング ソリューション。悪い点があれば修正してください。
準備
vue-cli を使用して必要な単一ページのプロジェクト スキャフォールディングを生成し、変更プロジェクトを開始します。
再構築プロセス
Step1 ディレクトリ構造を変更する
step1 srcディレクトリの下に新しいviewsフォルダを作成し、viewsフォルダの下に新しいindexフォルダを作成する
step2 src内のmain.jsを変更するステップ1でApp.vueをindexフォルダーに移動し、main.jsの名前をindex.jsに変更します
ステップ3 srcディレクトリ内のルーターフォルダーをステップ1のindexフォルダーに移動します(使用されていない場合)ルーターはコメントアウトできますIndex.js にありますが、各ページは単一ページのアプリケーションではなく、ルーティング機能を使用する必要がないため、使用していません
step4 ルートディレクトリにあるindex.htmlファイルをstep1に移動します。インデックスフォルダーの下
ステップ 2 ビルド下の設定ファイルを変更します
実稼働環境では、固有の js ファイルはページにパッケージ化され、パブリック js はすべて 1 つの塊にパッケージ化されません。パッケージ化後のファイル ディレクトリ構造も比較的明確です。すべての変更はビルド フォルダー内にあります
step1 utils.js を変更し、2 つの関数を追加します。1 つはページの複数のエントリを取得するために使用され、もう 1 つはパッケージ化されたページに入るために使用され、js:
var glob = require('glob') var HtmlWebpackPlugin = require('html-webpack-plugin') var PAGE_PATH = path.resolve(__dirname, '../src/views') var merge = require('webpack-merge') //多入口配置 //获取views文件夹下,每个页面下的index.js作为页面入口,故每个页面下都必须有index.js exports.entries = function() { var entryFiles = glob.sync(PAGE_PATH + '/*/index.js') var map = {}, tmp = [], pathname = ''; entryFiles.forEach((filePath) => { var filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.')) tmp = filePath.split('/').splice(-4) map[tmp[2] + '/' + filename] = filePath }) return map } //多页面输出配置 //读取views文件夹下的对应每个页面的html后缀文件,然后放入数组中 //如果想要更深的定制或者修改,建议大家看一下CommonsChunkPlugin //推荐一个基础的 https://segmentfault.com/q/1010000009070061 exports.htmlPlugin = function() { let entryHtml = glob.sync(PAGE_PATH + '/*/*.html') let arr = [] entryHtml.forEach((filePath) => { let jsPath = '', tmp = []; let filename = filePath.substring(filePath.lastIndexOf('\/') + 1, filePath.lastIndexOf('.')) tmp = filePath.split('/').splice(-4) jsPath = tmp[2] + '/' + 'index' let conf = { template: filePath, filename: filename + '.html', chunks: ['manifest', 'vendors', jsPath], inject: true } if (process.env.NODE_ENV === 'production') { conf = merge(conf, { minify: { removeComments: true, collapseWhitespace: true, removeAttributeQuotes: true }, chunksSortMode: 'dependency' }) } arr.push(new HtmlWebpackPlugin(conf)) }) return arr } step2 修改webpack.base.conf.js文件配置的入口 // entry: { // app: './src/main.js' // }, entry: utils.entries(), step3 修改webpack.dev.conf.js文件的打包方法 找到下面的代码,将其注释掉: new HtmlWebpackPlugin({ filename: 'index.html', template: 'index.html', inject: true }),
In を挿入します。プラグイン 上記のメソッドを属性値の後に追加します。 以下はコード スニペットです:
// new HtmlWebpackPlugin({ // filename: 'index.html', // template: 'index.html', // inject: true // }), new FriendlyErrorsPlugin() ].concat(utils.htmlPlugin()) step4 修改webpack.prod.conf.js 找到下面的代码,注释掉: new HtmlWebpackPlugin({ filename: config.build.index, template: 'index.html', inject: true, minify: { removeComments: true, collapseWhitespace: true, removeAttributeQuotes: true // more options: // https://github.com/kangax/html-minifier#options-quick-reference }, // necessary to consistently work with multiple chunks via CommonsChunkPlugin chunksSortMode: 'dependency' }),
上記のメソッドをプラグイン属性値の後に追加します。 以下はコード スニペットです:
new CopyWebpackPlugin([{ from: path.resolve(__dirname, '../static'), to: config.build.assetsSubDirectory, ignore: ['.*'] }]) ].concat(utils.htmlPlugin())
設定が完了しました。通常どおりプロジェクトを開始してください。
関連する推奨事項:
Vue-cli をマルチページをサポートする履歴モードに変換する方法
nodejs でのマルチページ クローラーのサンプル コード分析
以上がVue cli リファクタリングの複数ページのスキャフォールディングのサンプル共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。