类型错误:path.replace不是一个函数。

4
/node_modules/webpack/lib/TemplatedPathPlugin.js:72
        .replace(REGEXP_HASH, withHashLength(getReplacer(data.hash), data.hashWithLength))
         ^

运行webpack时,我遇到了这个错误——看起来path是一个对象而不是一个字符串,因此找不到替换方法。有谁能解释一下这个错误吗?下面是我的webpack.config.js文件:

var webpack = require('webpack');
var path = require('path');

var basePath = 'app';
var outputFile = 'output.js';

var config = {

    entry: basePath + '/index.js',

    output: {
        path: basePath,
        filename: outputFile
    },

    resolve: {
        extensions: ['', '.js']
    },

    module: {
        loaders: [{
            test: /\.js$/,
            exclude: /node_modules/,
            loader: 'babel-loader',
            query: {
                presets: ['es2015']
            }
        }]
    }
};

module.exports = config;

我认为你需要导出你的配置:module.exports = require('webpack.config.js')。 - Ugo T.
1
文档 "output.path 输出目录的绝对路径(必填)。" - Yury Tarabanko
2个回答

11

请检查您的插件配置。Webpack 2 对ExtractTextPlugin进行了轻微更改。它期望所有参数都包含在一个对象中,因此您的第一个参数现在是该对象上filename的值,而不是一个字符串。

Webpack 1 的方式: new ExtractTextPlugin('[hash].css', {allChunks: true, disable: false}),

Webpack 2 的方式: new ExtractTextPlugin({filename: '[hash].css', allChunks: true, disable: false}),

更多信息请参见README


1
最简单的追踪问题的方法是在文件/node_modules/webpack/lib/TemplatedPathPlugin.js上使用console.log(path)
我最近也遇到了同样的错误——然后我去修改了replacePathVariables函数: function replacePathVariables(path, data) { console.log(' ---> ', path) var chunk = data.chunk; var chunkId = chunk && chunk.id; } 我发现我不小心用数组设置了output.publicPath选项: output: { publicPath: ['/dist/'] } 而不是字符串: output: { publicPath: '/dist/' }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接