问题
I want to include shelljs library to angular 2 typescript. I have included the shelljs.d.ts file to my node_modules/shelljs library.
My package.json
"name": "myproj1",
"description": "myproj1: A project",
"typings": {
"shelljs": {
"definitions": "node_modules/shelljs/shelljs.d.ts",
"source": "node_modules/shelljs/global.js"
}
},
My 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'
};
My package.json compiler options:
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true
},
My TS file:
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);
});
}
I am getting the error as "Cannot find module 'shelljs'". Please help me to include the library in my project.
回答1:
Use tsd to manage all your typings.
From your project directory:
npm install tsd -g
tsd install node --save
tsd install shelljs --save
Then include the reference to shelljs in your foo.ts
:
/// <reference path="typings/shelljs/shelljs.d.ts" />
import {exec} from "shelljs";
exec('node --version', code => {
console.log('Exit code:', code);
});
Based on the comments, here is the summary:
Using shelljs
is only possible in NodeJS
environment. This can be either raw nodejs
instance, or some projects which contain nodejs in self, like Electron.
Also you should pay attention, which Module System you are using. For NodeJS
you can use CommonJS
without any further bundlers. But if you compile your TypeScripts for the frontend, where NodeJS
is not present, then you should also bundle your CommonJS
modules with browserify. Or you can use other types of Modules, like amd or SystemJS, and then in typescript compiler options, you set `"module": "system" for instance. See all options here
来源:https://stackoverflow.com/questions/36913677/cannot-find-module-shelljs-on-including-the-lib-in-angular-2-typescript