我有一个用Webpack 2.1包装的Angular2项目.~。 我从npm软件包安装了ng2-uploader,它现在在node_modules下面。现在,当我启动应用程序时,我收到此错误:
" Typescript没有为(.path \ ng-file-select.ts)发出输出 Object.loader(path \ node_modules \ ts-loader ..)"
" Typescript没有为(.path \ ng2-uploader.ts)发出输出 Object.loader(path \ node_modules \ ts-loader ..)"
" Typescript没有为(..path \ ng-file-drop.ts)发出输出 Object.loader(path \ node_modules \ ts-loader ..)"
这是打字稿加载器的问题吗?
Webpack正在将ts文件编译成js,错误是从ng2-uploader的index.js的这一部分出来的:
if (outputText == null)
throw new Error("Typescript emitted no output for " + filePath);

这是我的tsconfig.json:
{
"compilerOptions": {
"baseUrl": ".",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": [
"dom",
"es5"
],
"module": "commonjs",
"noEmitHelpers": true,
"removeComments": true,
"sourceMap": true,
"target": "es5",
"types": [
"core-js",
"firebase",
"jasmine",
"node"
]
},
"exclude": [
"node_modules",
"target",
"tmp"
]
}

这是我的webpack.config.json:
const argv = require('yargs').argv;
const path = require('path');
const autoprefixer = require('autoprefixer');
const CommonsChunkPlugin = require('webpack/lib/optimize/CommonsChunkPlugin');
const ContextReplacementPlugin = require('webpack/lib/ContextReplacementPlugin');
const DefinePlugin = require('webpack/lib/DefinePlugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin');
const ProgressPlugin = require('webpack/lib/ProgressPlugin');
const UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin');
const WebpackMd5Hash = require('webpack-md5-hash');
//=========================================================
// ENVIRONMENT VARS
//---------------------------------------------------------
const NODE_ENV = process.env.NODE_ENV;
const ENV_DEVELOPMENT = NODE_ENV === 'development';
const ENV_PRODUCTION = NODE_ENV === 'production';
const ENV_TEST = NODE_ENV === 'test';
const HOST = '0.0.0.0';
const PORT = 3000;
//=========================================================
// LOADERS
//---------------------------------------------------------
const loaders = {
componentStyles: {
test: /\.scss$/,
loader: 'raw!postcss!sass',
exclude: path.resolve('src/common/styles')
},
sharedStyles: {
test: /\.scss$/,
loader: 'style!css!postcss!sass',
include: path.resolve('src/common/styles')
},
html: {
test: /\.html$/,
loader: 'raw'
},
typescript: {
test: /\.ts$/,
loader: 'ts',
}
};
//=========================================================
// CONFIG
//---------------------------------------------------------
const config = module.exports = {};
config.resolve = {
extensions: ['.ts', '.js'],
modules: [
path.resolve('.'),
'node_modules'
]
};
config.module = {
loaders: [
loaders.typescript,
loaders.html,
loaders.componentStyles
]
};
config.plugins = [
new DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(NODE_ENV)
}),
new LoaderOptionsPlugin({
debug: false,
minimize: ENV_PRODUCTION
}),
// Fix for angular2 critical dependency warning
// https://github.com/r-park/todo-angular2-firebase/issues/96
new ContextReplacementPlugin(
// The (\\|\/) piece accounts for path separators in *nix and Windows
/angular(\\|\/)core(\\|\/)(esm(\\|\/)src|src)(\\|\/)linker/,
path.resolve('src')
)
];
config.postcss = [
autoprefixer({ browsers: ['last 3 versions'] })
];
config.sassLoader = {
outputStyle: 'compressed',
precision: 10,
sourceComments: false
};
//=====================================
// DEVELOPMENT or PRODUCTION
//-------------------------------------
if (ENV_DEVELOPMENT || ENV_PRODUCTION) {
config.entry = {
main: ['./src/main.ts'],
polyfills: './src/polyfills.ts',
vendor: './src/vendor.ts'
};
config.output = {
filename: '[name].js',
path: path.resolve('./target'),
publicPath: '/'
};
config.plugins.push(
new CommonsChunkPlugin({
name: ['vendor', 'polyfills'],
minChunks: Infinity
}),
new HtmlWebpackPlugin({
chunkSortMode: 'dependency',
filename: 'index.html',
hash: false,
inject: 'body',
template: './src/index.html'
})
);
}
//=====================================
// DEVELOPMENT
//-------------------------------------
if (ENV_DEVELOPMENT) {
config.devtool = 'cheap-module-source-map';
config.module.loaders.push(loaders.sharedStyles);
config.plugins.push(new ProgressPlugin());
config.devServer = {
contentBase: './src',
historyApiFallback: true,
host: HOST,
port: PORT,
stats: {
cached: true,
cachedAssets: true,
chunks: true,
chunkModules: false,
colors: true,
hash: false,
reasons: true,
timings: true,
version: false
}
};
}
//=====================================
// PRODUCTION
//-------------------------------------
if (ENV_PRODUCTION) {
config.devtool = 'source-map';
config.output.filename = '[name].[chunkhash].js';
config.module.loaders.push({
test: /\.scss$/,
loader: ExtractTextPlugin.extract('css?-autoprefixer!postcss!sass'),
include: path.resolve('src/common/styles')
});
config.plugins.push(
new WebpackMd5Hash(),
new ExtractTextPlugin('styles.[contenthash].css'),
// TODO: DedupePlugin is broken on webpack2-beta22
// new webpack.optimize.DedupePlugin(),
new UglifyJsPlugin({
comments: false,
compress: {
dead_code: true, // eslint-disable-line camelcase
screw_ie8: true, // eslint-disable-line camelcase
unused: true,
warnings: false
},
mangle: {
screw_ie8: true // eslint-disable-line camelcase
}
})
);
}
//=====================================
// TEST
//-------------------------------------
if (ENV_TEST) {
config.devtool = 'inline-source-map';
config.module.loaders.push(loaders.sharedStyles);
if (argv.coverage) {
config.module.postLoaders = [{
test: /\.ts$/,
loader: 'istanbul-instrumenter-loader',
include: path.resolve('src'),
exclude: [
/\.spec\.ts$/,
]
}];
// override tsconfig.json
config.ts = {
compilerOptions: {
inlineSourceMap: true,
sourceMap: false
}
};
}
}

有什么问题,我该如何解决?