Jak uruchomić aplikację w ES6?

Jak uruchomić aplikację w ES6?
Wojciech Stolarz
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

Witam. Ostatnio przerabiam uczenie maszynowe według Buraka Kanbera i jestem na pierwszy rozdziale.

Chciałem przygotować środowisko i uruchomić program "Witaj świecie"

ale po wpisaniu do CMD yarn build-cli, mam błąd

Kopiuj
ParseError: 'import' and 'export' may appear only with 'sourceType: module'

W folderze głównym mam package.json

Kopiuj
{
  "name": "R01-Cw1",
  "version": "1.0.0",
  "description": "sss",
  "main": "dist/index.js",
  "license": "MIT",
  "scripts": {
    "build-web": "browserify src/index.js -o dist/index.js -t [ babelify --presets [env ]]",
    "build-cli": "browserify src/index.js --node -o dist/index.js -t [ babelify --presets [env ]]",
    "start": "yarn build-cli && node dist/index.js"
  },
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-preset-env": "^1.7.0",
    "babelify": "^10.0.0",
    "browserify": "^17.0.0"
  },

    "parser": "babel-eslint",
    "parserOptions": {
      "sourceType": "module",
      "allowImportExportEverywhere": true
    },

    "plugins": ["react"],
    "rules": {
      "react/prop-types": 0
    }
 
}

a w folderze src/ dwa pliki: greeting i index.js

Kopiuj
const greeting = name => 'Witaj,' + name + '!';
export default greeting;
Kopiuj
import greeting from './greeting';
console.log(greeting(process.argv[2] || 'świecie'));
LukeJL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8487
2

Tak jak @Riddle wspomniał na dole - chodzi o moduły ES6, których wydaje się, że Browserify nie łapie (bo to błąd z Browserify?)

Niby masz jakieś opcje parsera (i błąd sugeruje, że Browserify ma zdolność czytania takich plików, a przynajmniej parser, z którego korzysta), ale tak jakby nie łapało ci tego:

Kopiuj
"parserOptions": {
  "sourceType": "module",
  "allowImportExportEverywhere": true
},

Ew. w sumie Browserify może nawet niekoniecznie musi wiedzieć o modułach z ES6, bo od tego jest Babel. Możliwe, że źle konfigurujesz/integrujesz wtyczkę Babelify.

Ale... jest jakiś szczególny powód, dla którego używasz staruśkiego Browserify (widzę nawet, że nieuaktualnie - ostatni apdejt był 3 lata temu https://www.npmjs.com/package/browserify ) zamiast jakichś nowocześniejszych narzędzi? (Np. ja polecam Esbuild, chociaż najpopularniejszy jest Webpack).

W każdym razie instalujesz Esbuilda, masz to od ręki https://esbuild.github.io/getting-started/

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0

Modularyzacja ze składnią import/export to jest funkcjonalność dodana w ES6, nazywana często "modules" lub "module".

Aktualnie nie ma to jeszcze pełnego wsparcie, ale jakieś istnieje, więc masz dwie opcje:

  • Wspierać tylko te środowiska w których moduły są już rozpoznawane, czyli aktualnie nie wszystkie: i wtedy wystarczy że zmienisz "type" na "module" albo odpalisz aplikację w przeglądarce z type="module"
  • Albo możesz wspierać wszystkie środowiska, np poprzez transpilację nowej składni do tej bardziej kompatybilnej, używając:
    • webpack
    • vite
    • sam babel
Wojciech Stolarz
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

Riddle o które "type" CI chodzi?

GO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 141
2

I jak poradziłeś sobie?

Jak Riddler napisał, jak dodasz do package.json, po między klamry "type":"module" to teraz robisz w konsoli node src/index.js dupo to powinno wypisać ci na ekran Witaj dupo!.

Jak zrobiłeś tak jak LukeJL czyli zaorałeś i użyłeś esbuild, to chyba najlepszy pomysł po prostu użyć normalnych narzędzi budowania, zrobić nowy projekt itp.

Możesz też próbować naprawić to co już masz wtedy zrób yarm install esmify czy npm i potem wyedytuj "build-cli": "browserify -p esmify src/index.js --node -o dist/index.js -t [ babelify --presets [env ]]", po prostu dopisz tam -p esmify i to też powinno zadziałać, ewentualnie jakieś samo "browserify -p esmify src/index.js -o dist/index.js

Ewentualnie mógłbyś zamienić export default na module.exports = i potem zamiast import użyć require()

Wojciech Stolarz
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

node src/index.js nie może znaleźć modułu

dzek69
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
0

w tym package.json masz namieszane, opcje z eslinta są "globalnie", a powinny być owrapowane w eslintConfig

błąd też jest z eslinta

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.