首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Webpack 2/Gulp/Typescript生成意外令牌错误

Webpack 2/Gulp/Typescript生成意外令牌错误
EN

Stack Overflow用户
提问于 2017-07-13 00:45:19
回答 2查看 176关注 0票数 0

我正在尝试更新一个项目,该项目使用的是webpack 1,现在使用的是webpack 2,但我遇到了两个无法解决的问题。

第一个问题是,除非我在resolve extensions数组中提供'‘选项,否则,webpack似乎无法定位我的入口点--根据我对文档的理解,对于webpack 2,这应该不再是必要的。我可以通过添加'’来避免这个错误,但随后我在尝试加载文件时出现错误(“意外令牌。您可能需要一个适当的加载器来处理此文件类型”)。我在这篇文章中只包含这两个问题,因为我认为它们可能是同一问题的两个症状。

下面是我正在使用的gulp文件的一部分:

代码语言:javascript
复制
const helpers = require('./config/helpers');

var gulp = require('gulp');
var webpack = require('webpack');
var webpackStream = require('webpack-stream');

const buildNumber = process.env.buildNumber = helpers.buildNumber;


gulp.task('build-host-Debug', function (cb) {
    var webpackConfig_Host = require('./config/webpack-host.dev.js');

    return gulp
        .src([
            './src/app/entry1.ts'
        ], { base: 'src' })
        .pipe(webpackStream(webpackConfig_Host))
        .pipe(gulp.dest('./app'));
});

我将webpack的配置拆分为两个文件--以下是包含typescript加载器的通用文件:

代码语言:javascript
复制
var webpack = require('webpack');
var helpers = require('./helpers');
var Visualizer = require('webpack-visualizer-plugin');

require('es6-promise').polyfill();

module.exports = {
    entry: {
        MyEntry1: './src/app/entry1.ts',
        MyEntry2: './src/app/entry2.ts'
    },
    output: {
        path: helpers.root('app'),
        filename: 'js/[name].js',
        chunkFilename: '[id].chunk.js'
    },

    resolve: {
        extensions: ['', '.tsx', '.ts', '.js'] 
    },
    module: {
        rules: [
            {
                test: /\.ts$/,
                exclude: [helpers.root('src', 'app/management'), helpers.root('src', 'app/main'), /node_modules/],
                use: [{
                    loader: 'awesome-typescript-loader'
                }]
            },
            {
                test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot|ico)$/,
                exclude: [helpers.root('src', 'app/management'), helpers.root('src', 'app/main'), /node_modules/],
                use: [{
                    loader: 'file-loader?name=images/[name].[ext]'
                }]
            }
        ]
    },
    plugins: [
        new Visualizer({
            filename: './stats-host.html'
        })
    ]
};

这是继承的文件,其中包含特定于开发的内容(与我的生产文件略有不同):

代码语言:javascript
复制
var webpack = require('webpack');
var webpackMerge = require('webpack-merge');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var commonConfig = require('./webpack-host.common.js');
var helpers = require('./helpers');

process.env.buildNumber = helpers.buildNumber;

module.exports = webpackMerge(commonConfig, {
    devtool: 'inline-source-map',
    module: {
        rules: [
            {
                test: /entry1\.scss$/,
                include: helpers.root('src', 'app/css'),
                use: [{ loader: 'file-loader?name=css/[name].css' }, { loader: 'sass-loader?sourceMap' }]
            },
            {
                test: /entry2\.scss$/,
                include: helpers.root('src', 'app/css'),
                use: [{ loader: 'file-loader?name=css/[name].css' }, { loader: 'sass-loader?sourceMap' }]
            }
        ]
    },
    plugins: [
        new webpack.DefinePlugin({
            'process.env': {
                'buildNumber': JSON.stringify(process.env.buildNumber)
            }
        })
    ]
});

如果我从解析的扩展中删除'‘,那么我会得到这个错误:

代码语言:javascript
复制
Error: Entry module not found: Error: Cannot resolve 'file' or 'directory' ./src/app/entry1.ts in W:\TestApp\
resolve file
  W:\TestApp\src\app\entry1.ts.tsx doesn't exist
  W:\TestApp\src\app\entry1.ts.ts doesn't exist
  W:\TestApp\src\app\entry1.ts.js doesn't exist
resolve directory
  W:\TestApp\src\app\entry1.ts\package.json doesn't exist (directory description file)
  W:\TestApp\src\app\entry1.ts is not a directory 

如果我在'‘中离开,我会得到这个错误:

代码语言:javascript
复制
Error: ./src/app/entry1.ts
Module parse failed: W:\TestApp\src\app\entry1.ts Unexpected token (14:13)
You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected token (14:13)
    at Parser.pp$4.raise (W:\TestApp\node_modules\webpack-stream\node_modules\acorn\dist\acorn.js:2221:15)
    at Parser.pp.unexpected (W:\TestApp\node_modules\webpack-stream\node_modules\acorn\dist\acorn.js:603:10)
    at Parser.pp.semicolon (W:\TestApp\node_modules\webpack-stream\node_modules\acorn\dist\acorn.js:581:61)
    at Parser.pp$1.parseVarStatement (W:\TestApp\node_modules\webpack-stream\node_modules\acorn\dist\acorn.js:918:10)
    at Parser.pp$1.parseStatement (W:\TestApp\node_modules\webpack-stream\node_modules\acorn\dist\acorn.js:706:19)
    at Parser.pp$1.parseTopLevel (W:\TestApp\node_modules\webpack-stream\node_modules\acorn\dist\acorn.js:638:25)
    at Parser.parse (W:\TestApp\node_modules\webpack-stream\node_modules\acorn\dist\acorn.js:516:17)
    at Object.parse (W:\TestApp\node_modules\webpack-stream\node_modules\acorn\dist\acorn.js:3098:39)
    at Parser.parse (W:\TestApp\node_modules\webpack-stream\node_modules\webpack\lib\Parser.js:902:15)
    at DependenciesBlock.<anonymous> (W:\TestApp\node_modules\webpack-stream\node_modules\webpack\lib\NormalModule.js:104:16)

我很感谢任何人能提供的任何帮助,因为我有点绝望,我不想再呆在《webpack 1》上了。

EN

回答 2

Stack Overflow用户

发布于 2017-07-13 15:44:08

您的入口点不需要指定扩展名:

代码语言:javascript
复制
entry: {
    MyEntry1: './src/app/entry1',
    MyEntry2: './src/app/entry2'
},
票数 0
EN

Stack Overflow用户

发布于 2017-07-13 22:54:01

我想通了。我的吞咽任务必须将webpack对象传递给webpackStream:

代码语言:javascript
复制
gulp.task('build-host-Debug', function (cb) {
    var webpackConfig_Host = require('./config/webpack-host.dev.js');

    return gulp
        .src([
            './src/app/entry1.ts'
        ], { base: 'src' })
        .pipe(webpackStream(webpackConfig_Host, webpack))
        .pipe(gulp.dest('./app'));
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45063419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档