什么是"节点方式"跨多个文件分割代码?

时间:2016-08-26 10:43:10

标签: node.js typescript

我目前正在研究NodeJS / Typescript项目,它是一个带有NodeJS服务器的HTML5客户端,通过网络套接字进行通信。来自C#背景,我喜欢将我的代码分成不同的文件以用于不同的事情,包括用于序列化和反序列化的对象的共享文件,用于在有组织的&组中发送/接收数据。明确的方式。

目前在服务器端,我已经将构建选项设置为将其编译为单个JavaScript文件,并且我将其作为我的启动脚本,但我相信这对我的问题来说是一个混乱的解决方案。为了解决输出文件顺序的问题,我还必须在我的" main"的顶部放置一个有序的引用列表到各种TypeScript文件。打字稿文件。

这似乎是完全错误的方法,是否有可能仍然分离出不同的Typescript(/ Javascript)文件,以便不同的逻辑区域在一个专用的地方,同时仍然能够共享文件之间我的HTML客户端&我的NodeJS服务器,或者这只是一种解决方法,我将不得不学习如何生活?

1 个答案:

答案 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']
    }
};