我想将shelljs库包含到angular 2打字稿中。我已经将shelljs.d.ts文件包含到我的node_modules / shelljs库中。

我的package.json

"name": "myproj1",
  "description": "myproj1: A project",
  "typings": {
    "shelljs": {
      "definitions": "node_modules/shelljs/shelljs.d.ts",
      "source": "node_modules/shelljs/global.js"
    }
  },


我的webpack.config.js

var path = require('path');
module.exports = {
    entry:  './app/web/boot.ts',
    output: {
        path: path.resolve(__dirname, "js"),
        filename: "bundle.js"
    },
    resolve: {
        extensions:['','.js','.ts']
    },
    module:{
        loaders: [{
            test: /\.ts/,
            loaders: ['ts-loader'],
            exclude: /node_modules/
        }]
    },
    target: 'node'
};


我的package.json编译器选项:

"compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true
  },


我的TS文件:

import child = require("shelljs");
somefun(){
 child.exec('node --version',(code, stdout, stderr)=>{
            console.log('Exit code:', code);
            console.log('Program output:', stdout);
            console.log('Program stderr:', stderr);
        });
}


我收到错误消息“找不到模块'shelljs'”。请帮助我将库包括在我的项目中。

最佳答案

使用tsd管理所有键入。

从您的项目目录:

npm install tsd -g
tsd install node --save
tsd install shelljs --save


然后在您的foo.ts中包含对shelljs的引用:

/// <reference path="typings/shelljs/shelljs.d.ts" />
import {exec} from "shelljs";

exec('node --version', code => {
    console.log('Exit code:', code);
});


根据评论,这里是摘要:

仅在shelljs环境中可以使用NodeJS。这可以是原始的nodejs实例,也可以是一些自身包含nodejs的项目,例如Electron

您还应该注意所使用的模块系统。对于NodeJS,您可以使用CommonJS,而无需任何其他捆绑软件。但是,如果为不存在NodeJS的前端编译TypeScript,则还应将CommonJS模块与browserify捆绑在一起。或者,您可以使用其他类型的模块,例如amdSystemJS,然后在Typescript编译器选项中设置“模块”:“系统”。查看所有选项here

09-12 02:13