Daniil
и фраза 'для тех кто в танке' теперь звучит: 'для тех кто на санках'😂
Юрий
Кто-нибудь сталкивался с проблемоой: Webpack 4 + React функциональные компоненты созданные стрелочной функцией не работают, пишет синтаксическая ошибка, а через function работает, при этом .jsx тоже не понимает
Oleg
package.json в студию
Юрий
{ "name": "app-from-t2", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "jest", "start": "webpack-dev-server --mode development --open --hot", "build": "webpack --mode production" }, "author": "", "license": "ISC", "devDependencies": { "@babel/core": "^7.6.4", "@babel/preset-env": "^7.6.3", "@babel/preset-react": "^7.6.3", "babel-jest": "^24.9.0", "babel-loader": "^8.0.6", "css-loader": "^3.2.0", "html-webpack-plugin": "^3.2.0", "identity-obj-proxy": "^3.0.0", "jest": "^24.9.0", "jest-cli": "^24.9.0", "node-sass": "^4.12.0", "regenerator-runtime": "^0.13.3", "sass-loader": "^8.0.0", "style-loader": "^1.0.0", "webpack": "^4.41.2", "webpack-cli": "^3.3.9", "webpack-dev-server": "^3.8.2" }, "dependencies": { "axios": "^0.19.0", "file-loader": "^4.2.0", "prop-types": "^15.7.2", "react": "^16.10.2", "react-dom": "^16.11.0", "react-redux": "^7.1.1", "redux": "^4.0.4", "redux-form": "^8.2.6", "redux-thunk": "^2.3.0" }, "jest": { "moduleNameMapper": { "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/mocks/fileMock.js", "\\.(css|scss)$": "identity-obj-proxy" } } }
Nikita
import React from 'react’?
Юрий
Да, import React from 'react';
Archer
возможно https://stackoverflow.com/questions/33460420/babel-loader-jsx-syntaxerror-unexpected-token
Oleg
скрин ошибки б
Archer
так же конфиг проверь
Archer
``` .... resolve: { extensions: ['', '.js', '.jsx'], } }; ```
Archer
да чтоб тебя...
Archer
ну ты понял
Oleg
ёёё
Юрий
Oleg
ну и webpack.config.js тоже скинь
Юрий
const path = require("path"); const HtmlWebpackPlugin = require("html-webpack-plugin"); module.exports = { entry: "./src/index.js", output: { path: path.join(__dirname, "/dist"), filename: "index-bundle.js" }, module: { rules: [ { test: /\.js?$/, exclude: /node_modules/, use: 'babel-loader' }, { test: /\.json$/, exclude: /node_modules/, use: 'file-loader' }, { test: /\.s[ac]ss$/i, use: ['style-loader', 'css-loader', 'sass-loader'] }, { test: /\.(jpe?g|png|gif|svg)$/i, use: "file-loader?name=images/[name].[ext]" }, ], }, plugins: [ new HtmlWebpackPlugin({ template: "./src/index.html" }) ] };
Юрий
babel-preset-react не помогло
Archer
resolve: { extensions: ['.js', '.jsx'], }
Archer
https://stackoverflow.com/questions/38529554/cannot-es6-import-jsx-modules-in-webpack
Юрий
в .babelrc { "presets": ["@babel/preset-env", "@babel/preset-react"]}
Oleg
да, резолв добав
Юрий
Стартовать с resolve перестало
Юрий
Daniil
для стрелочных если не ошибаюсь нужен "babel-plugin-transform-es2015-arrow-functions" пример babel.rc: { "plugins": [ "transform-es2015-arrow-functions", "@babel/plugin-proposal-class-properties", "@babel/plugin-syntax-dynamic-import" ], "presets": ["@babel/preset-env"] } для jsx в вебпак конфиге достаточно: module: { rules: [ { test: /\.jsx?/, include: APP_DIR, loader: 'babel-loader', }, ], },
Oleg
а ты куда резолв то добавил?
Юрий
webpack.config.js
Юрий
Юрий
Из-за '' регается. Когда убераю стартует, но старая ошибка остается
Archer
'' убери первый
Oleg
ну вот эту пустую строку удали да
Юрий
Возвращается предыдущая ошибка неизвестного токена
Archer
как выше module: { rules: [ { test: /\.jsx?/, include: APP_DIR, loader: 'babel-loader', }, ], },
Oleg
ну и попробуй этот мб установить плаген transform-es2015-arrow-functions
Юрий
APP_DIR is not defined
Daniil
это константа можешь вручную прописать: var path = require('path'); var APP_DIR = path.resolve(__dirname, 'src');
Daniil
модуль path нужно добавить если не найдет (вообще мне кажется проще с cra работать до поры)
Юрий
Заработало
Юрий
rules: [ { test: /\.jsx?/, include: APP_DIR, loader: 'babel-loader', },
Daniil
отлично)
Oleg
👍
Юрий
резолв убрал продолжело работать
Юрий
Т.е по сути получилась проблема в var APP_DIR = path.resolve(__dirname, 'src'); и include: APP_DIR,
Юрий
Спасибо огромное за помощь
Daniil
я вообще не помню что это за resolve не сталкивался с таким параметром)
Daniil
не за что
Юрий
Да в мануалах куча лишнего. Я собирал конфиг проверяя что на что влияет и оставляю его минимальным
Юрий
Просто вебпак 4 из их документации обходится без многих параметров которые раньше нужны были
Archer
https://webpack.js.org/configuration/resolve/
Daniil
а ну тогда понятно, да нужно смотреть на версии, может это из прежних
Daniil
а все вспомнил
Юрий
И почему то import Header from "./header/Header"; не работает, начинает рабодать когда в путь .jsx добавляешь
Daniil
встречал, это типа алиасы делать чтобы в модулях не писать import * from '../../.. и т.п.'
Юрий
Так и должно быть?
Daniil
в целом вещь удобная
Oleg
да, типа так
Oleg
resolve: { extensions: ['.ts', '.tsx', '.js', '.jsx'], alias: { 'ui': path.resolve(__dirname, 'src/ui'), 'entities': path.resolve(__dirname, 'src/entities'), } },
Daniil
обычно обрубать должно js и jsx насколько я помню, и еще имена файлов не зависимо от того классы или нет лучше писать прописными полностью
Daniil
некоторые люди предпочитают не использовать расширение jsx оно и с js будет работать если вебпак правильно настроен
Oleg
тс требует) tsx и ts разные вещи
Oleg
но возможно есть настройки
Daniil
если конечный файл index.js его вообще можно пропустить например вместо 'header/index.js' писать просто 'header'
Oleg
+
Daniil
ts классный язык мне шарпы напоминает (автор тот же) тут толково расписан, если кому интересно
Archer
интересно
Archer
Typescript - это не "еще один язык программирования". В двух словах - это просто надмножество Javascript (ES6) с опциональной статической типизацией.
Archer
но забавно как многие считают его языком
Archer
отличается он заметно
Oleg
все же, typescript это не надмножество
Arthur
Oleg
все же это язык
Oleg
язык программирования
Archer
https://www.typescriptlang.org/docs/home.html
Archer
кому же верить оф доке или википедии
Archer
вот вопрос
Archer
Поскольку TypeScript является подмножеством JavaScript, он не имеет шаблона по умолчанию - их было бы слишком много.
Archer
если перевести первое предложение
Daniil
я бы не назвал его подмножеством, в нем совершенно иные концепции заложены в отличие от js а то что он в него компилируется ну так это просто его особенность, я думаю его можно было бы при желании и в питон компилировать
Daniil
точнее транспилировать (чтобы не нарушать терминологию)