gpt4 book ai didi

reactjs - React.JS : TypeError: Cannot read property 'filter' of undefined at findLoader

转载 作者:行者123 更新时间:2023-12-03 14:28:17 24 4
gpt4 key购买 nike

我正在按照教程(https://www.fullstackreact.com/articles/react-tutorial-cloning-yelp/#routing)使用react.JS制作yelp克隆。我不断遇到错误:

TypeError: Cannot read property 'filter' of undefined at findLoader

错误发生在我的 webpack.config.js 文件中,并且不允许我运行程序或建立与本地主机的连接。

const NODE_ENV = process.env.NODE_ENV || 'development';
const dotenv = require('dotenv');

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

const join = path.join;
const resolve = path.resolve;

const getConfig = require('hjs-webpack');

const isDev = NODE_ENV === 'development';
const isTest = NODE_ENV === 'test';

// devServer config
const devHost = process.env.HOST || 'localhost';
const devPort = process.env.PORT || 3000;

const setPublicPath = process.env.SET_PUBLIC_PATH !== 'false';
const publicPath = (isDev && setPublicPath) ? `//${devHost}:${devPort}/` : '';

const root = resolve(__dirname);
const src = join(root, 'src');
const modules = join(root, 'node_modules');
const dest = join(root, 'dist');
const css = join(src, 'styles');

var config = getConfig({
isDev: isDev || isTest,
in: join(src, 'app.js'),
out: dest,
html: function (context) {
return {
'index.html': context.defaultTemplate({
title: 'FoodFinder',
publicPath,
meta: {}
})
};
}
});

// ENV variables
const dotEnvVars = dotenv.config();
const environmentEnv = dotenv.config({
path: join(root, 'config', `${NODE_ENV}.config.js`),
silent: true
});
const envVariables =
Object.assign({}, dotEnvVars, environmentEnv);

const defines =
Object.keys(envVariables)
.reduce((memo, key) => {
const val = JSON.stringify(envVariables[key]);
memo[`__${key.toUpperCase()}__`] = val;
return memo;
}, {
__NODE_ENV__: JSON.stringify(NODE_ENV),
__DEBUG__: isDev
});

config.plugins = [
new webpack.DefinePlugin(defines)
].concat(config.plugins);
// END ENV variables

// CSS modules
const cssModulesNames = `${isDev ? '[path][name]__[local]__' : ''}[hash:base64:5]`;

const matchCssLoaders = /(^|!)(css-loader)($|!)/;

const findLoader = (loaders, match) => {
const found = loaders.filter(l => l && l.loader && l.loader.match(match));
return found ? found[0] : null;
};

// existing css loader
const cssloader =
findLoader(config.module.loaders, matchCssLoaders);

const newloader = Object.assign({}, cssloader, {
test: /\.module\.css$/,
include: [src],
loader: cssloader.loader.replace(matchCssLoaders, `$1$2?modules&localIdentName=${cssModulesNames}$3`)
});
config.module.loaders.push(newloader);
cssloader.test = new RegExp(`[^module]${cssloader.test.source}`);
cssloader.loader = newloader.loader;

config.module.loaders.push({
test: /\.css$/,
include: [modules],
loader: 'style!css'
});

// CSS modules

// postcss
config.postcss = [].concat([
require('precss')({}),
require('autoprefixer')({}),
require('cssnano')({})
]);

// END postcss

// Roots
config.resolve.root = [src, modules];
config.resolve.alias = {
css: join(src, 'styles'),
containers: join(src, 'containers'),
components: join(src, 'components'),
utils: join(src, 'utils'),
styles: join(src, 'styles')
};
// end Roots

// Dev
if (isDev) {
config.devServer.port = devPort;
config.devServer.hostname = devHost;
}

// Testing
if (isTest) {
config.externals = {
'react/addons': true,
'react/lib/ReactContext': true,
'react/lib/ExecutionEnvironment': true
};

config.module.noParse = /[/\\]sinon\.js/;
config.resolve.alias.sinon = 'sinon/pkg/sinon';

config.plugins = config.plugins.filter(p => {
const name = p.constructor.toString();
const fnName = name.match(/^function (.*)\((.*\))/);

const idx = [
'DedupePlugin',
'UglifyJsPlugin'
].indexOf(fnName[1]);
return idx < 0;
});
}
// End Testing

module.exports = config;

我对 React.JS 和全栈开发非常陌生,所以任何帮助将不胜感激。

最佳答案

@Tyler Sebastian 提供的答案将不起作用,因为 const cssloader = findLoader(...); 用于根据您正在使用的教程查找现有的 cssloader,而新的正在推送的 loader 是用来替换它的。

根据教程的评论,该错误似乎是教程中使用的技术已更新,导致其损坏。评论者建议的解决方案是删除 node_modules 目录,将 webpack.config.js 文件替换为教程存储库中提供的文件,然后重新安装依赖项(本质上恢复到旧版本的技术)。

我认为这不是一个好方法,因为目的是学习一些有用的东西,不仅仅是让它发挥作用,而且它应该发挥作用。由于我是一个同样缺乏经验的 React 开发人员,试图使用这个过时的教程,所以我无法想出更好的解决方案

编辑:我已经尝试了评论建议的解决方案,但它不起作用。

关于reactjs - React.JS : TypeError: Cannot read property 'filter' of undefined at findLoader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44079557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com