我目前正在研究NodeJS / Typescript项目,它是一个带有NodeJS服务器的HTML5客户端,通过网络套接字进行通信。来自C#背景,我喜欢将我的代码分成不同的文件以用于不同的事情,包括用于序列化和反序列化的对象的共享文件,用于在有组织的&组中发送/接收数据。明确的方式。
目前在服务器端,我已经将构建选项设置为将其编译为单个JavaScript文件,并且我将其作为我的启动脚本,但我相信这对我的问题来说是一个混乱的解决方案。为了解决输出文件顺序的问题,我还必须在我的" main"的顶部放置一个有序的引用列表到各种TypeScript文件。打字稿文件。
这似乎是完全错误的方法,是否有可能仍然分离出不同的Typescript(/ Javascript)文件,以便不同的逻辑区域在一个专用的地方,同时仍然能够共享文件之间我的HTML客户端&我的NodeJS服务器,或者这只是一种解决方法,我将不得不学习如何生活?
答案 0 :(得分:0)
您可以使用webpack module bundler来避免您的有序参考列表。 Webpack负责所有依赖项解析和引用。要在服务器和客户端之间共享代码,您可以将它分离到一个公共模块/包中,然后将其导入到双方。
我使用webpack将我的Typescript代码编译为服务器代码的ES6代码,并使用额外的构建步骤(babel.io)与浏览器兼容的代码。
以下示例配置显示了使用Typescript的webpack的用法:
var path = require('path');
module.exports = {
entry: {
app: [ path.join(__dirname, './src/App.ts') ]
},
devtool: 'source-map',
output: {
path: path.join(__dirname, './build'),
filename: 'js/bundle.[name].js'
},
module: {
loaders: [{
// The loader that handles ts and tsx files. These are compiled
// with the ts-loader and the output is then passed through to the
// babel-loader. The babel-loader uses the es2015 and react presets
// in order that jsx and es6 are processed.
test: /\.ts(x?)$/,
exclude: /node_modules/,
loader: 'babel-loader?presets[]=es2015!ts-loader'
}, {
// The loader that handles any js files presented alone.
// It passes these to the babel-loader which (again) uses the es2015
// and react presets.
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel',
query: {
presets: ['es2015']
}
}]
},
resolve: {
extensions: ['', '.ts', '.tsx', '.js'],
modulesDirectories: ['node_modules', 'src', 'lib']
}
};