webpack angular2-rc5 uri.match不是一个函数

时间:2016-09-02 12:31:24

标签: angular webpack

我为angular2 rc.5开发提供了以下webpack设置,但失败并出现以下错误

url_resolver.js:238Uncaught TypeError: uri.match is not a function

webpack看起来像

var sliceArgs = Function.prototype.call.bind(Array.prototype.slice);
var toString  = Function.prototype.call.bind(Object.prototype.toString);
//const helpers = require('./helpers');
var webpack = require("webpack"),
              ExtractTextPlugin = require('extract-text-webpack-plugin'),
              //helpers = require('./helpers'),
              path = require('path');

var CommonsChunkPlugin = webpack.optimize.CommonsChunkPlugin;

module.exports = {
    entry: {
        'vendor': [
            // Polyfills
            'core-js/es6',
            'core-js/es7/reflect',
            'zone.js/dist/zone',
            'zone.js/dist/long-stack-trace-zone',
            // Angular2
            '@angular/common',
            '@angular/platform-browser',
            '@angular/platform-browser-dynamic',
            '@angular/core',
            '@angular/router',
            '@angular/http',
            // RxJS
            'rxjs',
            // Other
            'angular2-jwt'
        ],
        'app': [
            './src/index'
        ]
    },
    output: {
        path: root('build'),
        filename: '[name].js',
        // filename: '[name].[hash].js',
        sourceMapFilename: '[name].js.map',
        chunkFilename: '[id].chunk.js'
    },
    resolve: {
        root: __dirname,
        extensions: [
            '',
            '.ts',
            '.js',
            '.json',
            '.css',
            '.html'
        ]
    },
    devtool: 'source-map',
    module: {

        preLoaders: [
           /* {
                test: /\.ts$/,
                loader: 'string-replace-loader',
                query: {
                    search: '(System|SystemJS)(.*[\\n\\r]\\s*\\.|\\.)import\\((.+)\\)',
                    replace: '$1.import($3).then(mod => mod.__esModule ? mod.default : mod)',
                    flags: 'g'
                },
                include: [helpers.root('src')]
            },
            */
            { test: /\.ts$/, loader: 'tslint-loader' } ],
        loaders: [
            {
                test: /\.ts$/,
                loader: 'ts-loader',
                query: {
                    'ignoreDiagnostics': [
                        2403, // 2403 -> Subsequent variable declarations
                        2300, // 2300 Duplicate identifier
                        2304, // 2304 Cannot find name
                        2374, // 2374 -> Duplicate number index signature
                        2375  // 2375 -> Duplicate string index signature
                    ]
                },
                exclude: [ /\.spec\.ts$/, /\.e2e\.ts$/, /node_modules/ ]
            },

            // Support for *.json files.
            { test: /\.json$/,  loader: 'json-loader' },

            // Support for CSS as raw text
            { test: /\.css$/,   loader: 'raw-loader' },

            // support for .html as raw text
            { test: /\.html$/,  loader: 'raw-loader' },
            {
                test: /\.scss$/,
                exclude: /node_modules/,
                loaders: ['raw-loader', 'sass-loader'] // sass-loader not scss-loader
            },
            {
                test: /\.(png|woff|woff2|eot|ttf|svg)$/,
                loader: 'url-loader?limit=100000'
            }, {
                test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
                loader: "url?limit=10000&mimetype=application/font-woff"
            }, {
                test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
                loader: "url?limit=10000&mimetype=application/font-woff"
            }
        ],
        noParse: [
            /zone\.js\/dist\/.+/,
            /reflect-metadata/,
            /es(6|7)-.+/,
            /.zone-microtask/,
            /.long-stack-trace-zone/
        ]
    },
    plugins: [
        new CommonsChunkPlugin({ name: 'vendor', filename: 'vendor.js', minChunks: Infinity }),
        new CommonsChunkPlugin({ name: 'common', filename: 'common.js', minChunks: 2, chunks: ['app', 'vendor'] }),
        new ExtractTextPlugin('dist/app.css', {
            allChunks: true
        })

    ],
    // Other module loader config
    tslint: {
        emitErrors: false,
        failOnHint: false
    },

    // our Development Server configs
    // our Webpack Development Server config
    devServer: {
        historyApiFallback: true,
        publicPath: '/build'
    }
}

function getBanner() {
    return 'This is a sample that shows how to add authentication to an Angular 2 (ng2) app by @auth0';
}

function root(args) {
    args = sliceArgs(arguments, 0);
    return path.join.apply(path, [__dirname].concat(args));
}
function rootNode(args) {
    args = sliceArgs(arguments, 0);
    return root.apply(path, ['node_modules'].concat(args));
}

是否有针对此错误的修复程序?

2 个答案:

答案 0 :(得分:12)

我在迁移到webpack后遇到了类似的问题,这是由在为SystemJS设计的组件中使用moduleId: module.id引起的。

如果您的代码中出现moduleId,请删除它们。

在github上查看此问题:https://github.com/angular/angular/issues/10626

答案 1 :(得分:2)

我有同样的问题,但由于问题来自angular2-material 2.0.0-alpha.7-4,我使用了基于以下的临时修复:https://github.com/angular/material2/issues/974#issuecomment-242936198

npm i --save string-replace-loader

webpack.conf

...
preLoaders: [
  {
    test: /.js$/,
    loader: 'string-replace-loader',
    query: {
      search: 'moduleId: module.id,',
      replace: '',
      flags: 'g'
    }
  },
]
...