/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;
答案 0 :(得分: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}),
答案 1 :(得分:0)
追踪问题的最简单方法是在文件console.log(path)
上提供/node_modules/webpack/lib/TemplatedPathPlugin.js
。
我最近遇到了同样的错误 - 然后我转到该文件并修改了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/'
}