Angular2 w/Typescript-客户端/服务器应用程序是否正确?
我正在攻克Angular2(一般来说是Angular2)的核心概念,并一直在开发我的第一个“真正”应用程序。我正在使用GitHub上的一些示例项目和Angular站点上的quickstart作为指导,但遇到了一些障碍,我正在寻找一些关于“正确”方法的建议,以在应用程序中设置目录结构、集成打字和引用节点模块。显然,有些方面可能是个人编码偏好,所以我只是在这里寻求一些最佳实践建议 应用程序概述:Angular2 w/Typescript-客户端/服务器应用程序是否正确?,angular,typescript,Angular,Typescript,我正在攻克Angular2(一般来说是Angular2)的核心概念,并一直在开发我的第一个“真正”应用程序。我正在使用GitHub上的一些示例项目和Angular站点上的quickstart作为指导,但遇到了一些障碍,我正在寻找一些关于“正确”方法的建议,以在应用程序中设置目录结构、集成打字和引用节点模块。显然,有些方面可能是个人编码偏好,所以我只是在这里寻求一些最佳实践建议 应用程序概述: 应用程序有一个服务器端组件,用于连接到本地SQL server,并代理来自客户端的调用,以提供要显示的
- 应用程序有一个服务器端组件,用于连接到本地SQL server,并代理来自客户端的调用,以提供要显示的数据
- 应用程序有一个客户端组件,用于为页面/模板提供服务,并与服务器端通信,以调用检索数据并在页面上显示
- 应用程序使用gulp来配置和启动服务器端和客户端(不同的调用-例如:gulp启动服务器/gulp启动客户端)
我知道我可能没有在这里提供所有或完全特定的细节,但我希望您能看到我在这里提出的更高级别的最佳实践问题,并将我推向正确的方向。这是为任何使用Angular 2和SystemJS设置Typescript的人准备的 我假设您的基本设置正常(如果没有,请告诉我)。在
npm安装之后,我通常不触摸模块。这就是我设置它的方式(使用Angular 2和jQuery作为示例):
对于Angular 2,安装package.json中列出的必要模块
在public/ts/main.ts
(以具有bootstrap()
函数的为准)中,引用类型定义:/
这将允许您导入。。。从“angular2/core”
开始,假设您已正确设置SystemJS。我的SystemJS配置:
System.config({
packages: {
js: {format: 'register'}
}
});
System.import('/js/main').then(null, console.error.bind(console));
对于jQuery(和其他),npm安装jQuery
和打字安装jQuery--ambient
(与Angular 2不同,类型定义在单独的repo中)
同样,在public/ts/main.ts
中查找并引用类型定义:
//
有两种方法可以加载实际的jQuery代码。
1)
在index.html
现在您可以在Angular 2代码中使用$
。类型检查应按预期工作。(不要将import*作为$from'jquery'
使用,因为SystemJS将向/jquery
发出GET请求,该请求可能存在,也可能不存在)。
2) 如果您想从节点\u模块/
加载jQuery,则需要额外的设置:在后端,您需要为节点\u模块/
目录提供服务。在ExpressJS中,您可以使用以下方法执行此操作:
app.use(express.static(PROJECT_ROOT_FOLDER + '/node_modules'));
然后,您需要告诉SystemJS向节点\u模块/
中的jquery.js
文件发出GET请求,而不仅仅是/jquery
。使用map
执行此操作:
System.config({
map: {
jquery: '/jquery/dist/jquery.js'
},
packages: {
js: {format: 'register'}
}
});
System.import('/js/main').then(null, console.error.bind(console));
这意味着每次从“jquery”导入*时,as$
在您的代码中,SystemJS将向/jquery/dist/jquery.js
发出GET请求,而不是我们想要的/jquery
。
现在只要import*作为$from'jquery'
从任何需要的地方导入,一切都应该正常
您可以对其他模块(lodash等)执行上述步骤,前提是它们具有正确的类型定义并在浏览器中工作
你可以看看我的样本。这是一个平均堆栈,并不包含这里的所有内容,但它可能会有所帮助。希望一切顺利
System.config({
map: {
jquery: '/jquery/dist/jquery.js'
},
packages: {
js: {format: 'register'}
}
});
System.import('/js/main').then(null, console.error.bind(console));