微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于登录和主应用程序的 Webpack 开发中间件单独的页面

如何解决用于登录和主应用程序的 Webpack 开发中间件单独的页面

我希望构建一个单页应用程序,但我希望将我的登录脚本分开,以便用户登录之前不必下载整个应用程序。我也希望在他们登录时刷新页面以允许浏览器正确检测以保存密码。我可以让它在生产中正常工作,因为它创建了包含所有文件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');
  }
});

然后我有两个 HtmlWebpackPlugin 为登录和主应用程序创建一个页面,并将其设置为加载每个页面的特定块:

module.exports = {
  entry: {
    app: path.resolve(__dirname,'app','app.js'),signin: path.resolve(__dirname,'signin.js'),},plugins: [
    new webpack.ProvidePlugin({
      $: 'jquery',}),new HtmlWebpackPlugin({
      template: './app/template.html',filename: 'index.html',chunks: ['app'],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 页面的能力,因为它始终呈现主应用程序。

我将如何使用开发中间件为具有不同块或包的不同页面提供服务?我很确定需要服务器端渲染,但是关于它的文档并不多。由于文件都存储在内存中而不是文件夹中,您如何使用 res.render() 引用它们?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。