如何使TypeScript 2找到节点模块?

时间:2017-02-15 23:50:22

标签: node.js typescript

我找到了this回答,但它没有解决我的问题。

我只是在学习TypeScript。

我正在做的事情就像这样简单:

import * as child from 'child_process';

这会触发此错误:

TSError: ⨯ Unable to compile TypeScript
db\installDB.ts (1,24): Cannot find module 'child_process'. (2307)

我的想法是:它没有找到'child_process'因为我没有它的类型,所以我添加@types/node希望它现在能找到它。它没有。

有什么问题?

这是我的tsconfig.json

{
    "compilerOptions": {
        "outDir": "./dist/",
        "sourceMap": true,
        "noImplicitAny": true,
        "module": "commonjs",
        "target": "es5",
        "jsx": "react",
        "allowJs": true
    },
    "include": [
        "./db/**/*",
        "./src/**/*"
    ]
}

2 个答案:

答案 0 :(得分:0)

试试这个语法:

import child = require('child_process');

这是一个commonjs样式导入,用于nodejs模块,而不是您当前的当前ES6样式导入。

答案 1 :(得分:0)

如果你有webpack.config.js

将以下数组添加到devConfig

中的prodConfigwebpack.config.json
 externals: [
(function () {
    var IGNORES = ["fs","child_process","electron","path","assert","cluster","crypto","dns","domain","events","http","https","net","os","process","punycode","querystring","readline","repl","stream","string_decoder","tls","tty","dgram","url","util","v8","vm","zlib"];
    return function (context, request, callback) {
        if (IGNORES.indexOf(request) >= 0) {
            return callback(null, "require('" + request + "')");
        }
        return callback();
    };
})()
],

这将忽略IGNORES数组中列出的模块。

然后,在你的' Typescript'文件。

declare var require:any;
...
...
var exec = require('child_process');

如果您没有 webpack.config ,并且您的项目正在使用webpack。您可以在" node_modules / app_scripts / config"中找到它。从该路径复制webpack.config并将其保存在项目根目录的config文件夹中,并将以下代码粘贴到package.json

"config": {
   "ionic_bundler": "webpack",
   "ionic_webpack": "./config/webpack.config.js"
 },

如果您有SystemJS

将以下代码添加到system.config.js

 System.config({
  map: {
    'child_process': '@node/child_process'
  }
});