2016-04-28 93 views
1

我想將shelljs庫加入到angular 2打字稿中。我已將shelljs.d.ts文件包含到我的node_modules/shelljs庫中。找不到包含在角2打字稿中的lib的模塊「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'」。請幫助我將圖書館納入我的項目。

+0

不知道'shell.js'是如何工作的,但嘗試'let shell = require('shelljs/global'); shell.exec(...' – tchelidze

回答

0

使用tsd來管理所有的類型。

從項目目錄:

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

然後包括在參考shelljs您foo.ts

/// <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,無需任何其他打包商。但是,如果您爲前端編譯您的TypeScript,其中NodeJS不存在,那麼您還應該將CommonJS模塊與browserify捆綁在一起。或者您可以使用其他類型的模塊,例如amdSystemJS,然後在打字稿編譯器選項中設置`「module」:「system」。查看所有選項here

+0

tsd已更新爲類型,當我包含它,我得到錯誤,因爲模塊總是在「node_modules」文件夾下查找。所以我安裝了shelljs npm並將我的類型文件放在node_modules/shelljs文件夾中,仍然出現「找不到模塊shelljs」的錯誤,Node.d.ts在缺省的情況下在angular2 ts下可用 – AishApp

+0

你不應該在node_modules裏面放置任何東西安裝類型爲tsd的for 'shelljs'並在你的文件中包含正確的路徑,使用'/// <引用路徑=「shelljs/shelljs.d.ts」/>'。注意路徑是相對於你當前的'.ts'文件。 – tenbits

+0

沒有安裝shelljs在node_modules中,我在編譯時收到如下錯誤。c:\ Users \ user \ Desktop \ Samples \ Angular_Projects \ myProject1 \ myproj1 \ node_modules \ shelljs不存在(模塊爲目錄) 在安裝了node_modules中的shelljs後,運行期間出現「Uncaught ReferenceError:require is not defined」顯示在我的應用程序上的空白屏幕的時間 – AishApp