我肯定错过了一些非常基本的东西。我正在开发一个用户登录的Angular 2应用程序。登录后,用户将能够访问仅对登录用户可见的安全组件。如何分离Webpack以首先提供登录屏幕,并且只有在成功登录其余部分之后?
在Chrome开发工具的angular2-authentication-sample中,我可以在登录前看到所有源代码。甚至是登录后才能看到的页面的源代码。
所以我的问题是:
答案 0 :(得分:3)
您可以使用动态加载的块的功能。例如,想象一下这个路由模型:
switch(routeName) {
case 'home':
const homePage = require('homePage');
homePage();
break;
case 'contact':
const contactPage = require('contactPage');
contactPage();
break;
case 'dashboard': // <-- this should be protected
const dashboardPage = require('dashboardPage');
dashboardPage();
break;
case 'informationForLoggedUser': // <-- this should be protected
const informationForLoggedUserPage = require('informationForLoggedUserPage');
informationForLoggedUserPage();
break;
};
在上面的示例中,所有路线都将下载到单个bundle.js
文件中。要改变它,你可以使用require.ensure
的力量。使用3rd parameter将受保护的路由包裹在require.ensure
中,并将此块命名为protected
(此名称可以不同 - 这只是示例)。
switch(routeName) {
case 'home':
const homePage = require('homePage');
homePage();
break;
case 'contact':
const contactPage = require('contactPage');
contactPage();
break;
case 'dashboard': // <-- this will be protected
require.ensure([], () => {
const dashboardPage = require('dashboardPage');
dashboardPage();
}, 'protected');
break;
case 'informationForLoggedUser': // <-- this will be protected
require.ensure([], () => {
const informationForLoggedUserPage = require('informationForLoggedUserPage');
informationForLoggedUserPage();
}, 'protected');
break;
};
如果您将拥有此配置,请在webpack.config.js
中:
entry: path.resolve('src', 'main.js'),
output: {
path: path.resolve('build'),
filename: '[name].js', // <-- this is important
publicPath: '/'
},
webpack将生成以下文件:
main.js
1.protected.js
现在,您必须自行提供保护 - 不为未经过身份验证的用户发送*.protected.js
文件。
答案 1 :(得分:0)
如果您不希望所有代码都在客户端,则可以使用以下内容: