0

単一ページのアプリを構築しようとしていますが、ユーザーがサインインするまでアプリ全体をダウンロードする必要がないように、サインイン スクリプトを個別に保持したいと考えています。また、更新したいと考えています。ブラウザがパスワードを適切に検出して保存できるように、ログイン時のページ。すべてのファイルを含むdist/フォルダーが作成されるため、これを本番環境で正常に機能させることができますが、開発環境での設定に問題があります。signin.html ビューが見つからないというエラーが表示されます。私は webpack-dev-middleware を使用しており、serverSideRender を true に、index を false に設定しました。

if(process.env.DEVELOPMENT) {
  const webpack = require('webpack');
  const middleware = require('webpack-dev-middleware');
  const options = require('../webpack.dev.js');
  app.use(middleware(webpack(options), {
    serverSideRender: true,
    index: false,
  }));
}

app.use(express.static('dist'));
app.set('views', path.resolve(__dirname, '../dist'));
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');

app.get('/*', async (req, res) => {
  if(req.isAuthenticated()) {
      // Load main app
      res.render('index.html');
  } else {
      // Load just the signin
      res.render('signin.html');
  }
});

次に、2 つの HtmlWebpackPlugin を使用して、サインインとメイン アプリ用のページを作成し、各ページの特定のチャンクを読み込むように設定します。

module.exports = {
  entry: {
    app: path.resolve(__dirname, 'app', 'app.js'),
    signin: path.resolve(__dirname, 'app', 'signin.js'),
  },
  plugins: [
    new webpack.ProvidePlugin({
      $: 'jquery',
    }),
    new HtmlWebpackPlugin({
      template: './app/template.html',
      filename: 'index.html',
      chunks: ['app'],
    }),
    new HtmlWebpackPlugin({
      template: './app/template.html',
      filename: 'signin.html',
      chunks: ['signin']
    }),
  ],
  resolve: {
    alias: {
      src: path.resolve(__dirname, './app/'),
    },
  },
}

次に、開発用の webpack 構成があります。

const path = require('path');
const { merge } = require('webpack-merge');
const common = require('./webpack.common');

module.exports = merge(common, {
  mode: "development",
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].[hash:20].js',
  }
});

サーバーを起動すると、ビュー HTML が見つからないことが示されます。

Failed to lookup view "signin.html" in views directory "C:\Users\Joe\projects\testapp\dist"

「index:false」行を削除すると、メインのアプリ コードが読み込まれますが、どのページに移動しても常に index.html が読み込まれます。これは、API ページを常にレンダリングするため、API ページを持つ能力を損なうようです。メインアプリ。

開発ミドルウェアを使用して、異なるチャンクまたはバンドルで異なるページを提供するにはどうすればよいですか? サーバー側のレンダリングが必要であることは確かですが、それに関するドキュメントはあまり多くありません。ファイルはすべてフォルダーではなくメモリに保存されるため、どのように参照しますres.render()か?

4

0 に答える 0