Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Node.js的TypeScript代码编译成一个文件?_Node.js_Typescript_Typescript2.0 - Fatal编程技术网

如何将Node.js的TypeScript代码编译成一个文件?

如何将Node.js的TypeScript代码编译成一个文件?,node.js,typescript,typescript2.0,Node.js,Typescript,Typescript2.0,我想在与Node.js一起使用时将TypeScript编译为一个文件 我尝试过这样配置“tsconfig.json”: "compilerOptions": { "module": "commonjs", "target": "es6", "noImplicitAny": false, "sourceMap": false, "outFile": "./app/index.js", "pretty": true, "types": [

我想在与Node.js一起使用时将TypeScript编译为一个文件

我尝试过这样配置“tsconfig.json”:

"compilerOptions": {
    "module": "commonjs",
    "target": "es6",
    "noImplicitAny": false,
    "sourceMap": false,
    "outFile": "./app/index.js",
    "pretty": true,
    "types": [
      "node"
    ]
  }",
…但是当我尝试将
模块设置为
commonjs``时,我得到了错误:

错误TS6082:只有'amd'和'system'模块与--outFile一起受支持。
如果将其更改为
“模块”:“系统”
,则在
节点中运行文件时会出现此错误:

ReferenceError:未定义系统
如果将
模块
更改为
“amd”
,则在
节点
中运行文件时会出现此错误:

ReferenceError:未定义定义

单独使用TypeScript编译器无法将Node.js模块捆绑到单个文件中:CommonJS模块系统(由Node.js使用)中的每个文件都被视为单个模块,如果没有许多JavaScript代码捆绑器中的适当模块捆绑技术,就无法将其连接在一起(例如Browserify、Webpack、Rollup、Parceljs等)

其他模块系统(如SystemJS)没有此限制,只需使用TypeScript编译器即可将模块定义连接到单个文件中:
tsc…--outfile bundle.js-module system
。但是,Node.js不支持动态的模块定义

对于实际的解决方案,有两个合理的选择:要么配置您的项目以使用单独的工具(Browserify、Webpack等)捆绑解决方案,要么将的实现包含到Node.js应用程序中(说明)

我还将附带一个注释:考虑是否真的需要绑定服务器端代码。捆绑通常是在前端项目中执行的,以减少客户端侧资源的大小,尽管在资源高效的情况下它也可以用于服务器应用程序。

是正确的。目前,这是不可能的。仅使用TypeScript编译器将模块构建到单个文件中。介绍如何使用文件结构为的webpack:

├── index.js
├── package.json
├── src
│   ├── add-message
│   │   └── index.ts
│   ├── index.ts
│   └── upcase-messages
│       └── index.ts
├── tsconfig.json
└── webpack.config.js
webpack.config.js

const nodeExternals = require('webpack-node-externals');

module.exports = {
    entry: './src/index.ts',
    output: {
        filename: 'index.js', // <-- Important
        libraryTarget: 'this' // <-- Important
    },
    target: 'node', // <-- Important
    module: {
        rules: [
            {
                test: /\.tsx?$/,
                loader: 'ts-loader',
                options: {
                    transpileOnly: true
                }
            }
        ]
    },
    resolve: {
        extensions: [ '.ts', '.tsx', '.js' ]
    },
    externals: [nodeExternals()] // <-- Important
};
{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "outDir": "./",
    "noImplicitAny": true,
    "strictNullChecks": true
  },
  "include": [
    "src/**/*.ts"
  ],
  "exclude": [
    "node_modules"
  ]
}