node.js - মোচা পরীক্ষা চলাকালীন বাবেল অপ্রত্যাশিত টোকেন আমদানি




npm syntax-error (12)

অন্যান্য প্রাসঙ্গিক প্রশ্নগুলির প্রস্তাবিত সমাধানগুলি যেমন .belrc এ সঠিক প্রিসেটগুলি (es2015) সহ ইতিমধ্যে আমার প্রকল্পে প্রয়োগ করা হয়েছে।

আমার দুটি প্রকল্প রয়েছে (তাদের এ এবং বি কল করুন) যা উভয়ই ES6 মডিউল সিনট্যাক্স ব্যবহার করে। প্রজেক্ট এ এ, আমি প্রজেক্ট বি আমদানি করছি যা এনএমপি এর মাধ্যমে ইনস্টল করা হয় এবং নোড_মডিউলগুলি ফোল্ডারে থাকে। আমি যখন প্রকল্প A এর জন্য আমার পরীক্ষার স্যুটটি চালাচ্ছি তখন ত্রুটিটি পাচ্ছি:

সিনট্যাক্স এরর: অপ্রত্যাশিত টোকেন আমদানি

যা প্রকল্প বি থেকে এই কথিত ভ্রান্ত কোডের পূর্বে রয়েছে:

(ফাংশন (রফতানি, প্রয়োজনীয়, মডিউল, __ ফাইলিনাম, __dirname) history 'ইতিহাস / lib / createBrowserHistory' থেকে createBrowserHistory আমদানি করুন;

আইআইএফ এনপিএম বা সম্ভবত বেবেল সম্পর্কিত বলে মনে হচ্ছে যেহেতু আমার উত্স ফাইলে কেবল "ইতিহাস / lib / createBrowserHistory" থেকে ক্রিয়েট ব্রাউজার হিস্টরি রয়েছে; প্রজেক্ট বি এর পরীক্ষার স্যুইটে ইউনিট পরীক্ষা ভাল চলছে, এবং যদি আমি প্রকল্প বি কে নির্ভরতা হিসাবে অপসারণ করি তবে প্রজেক্ট এ, আমার টেস্ট স্যুট তখন (অভ্যন্তরীণ প্রকল্পের মডিউলগুলির জন্য এখনও এস 6 আমদানি ব্যবহার করছে) ঠিক ঠিক কাজ করে।

সম্পূর্ণ স্ট্যাক ট্রেস:

 SyntaxError: Unexpected token import
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:374:25)
    at Module._extensions..js (module.js:405:10)
    at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:138:7)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Module.require (module.js:354:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (actionCreators.js:4:17)
    at Module._compile (module.js:398:26)
    at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5)
    at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Module.require (module.js:354:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (/ProjectA/src/components/core/wrapper/wrapper.js:28:23)
    at Module._compile (module.js:398:26)
    at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5)
    at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Module.require (module.js:354:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (/ProjectA/src/components/core/wrapper/wrapperSpec.js:15:16)
    at Module._compile (module.js:398:26)
    at loader (/ProjectA/node_modules/babel-register/lib/node.js:130:5)
    at Object.require.extensions.(anonymous function) [as .js] (/ProjectA/node_modules/babel-register/lib/node.js:140:7)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Module.require (module.js:354:17)
    at require (internal/module.js:12:17)
    at /ProjectA/node_modules/mocha/lib/mocha.js:219:27
    at Array.forEach (native)
    at Mocha.loadFiles (/ProjectA/node_modules/mocha/lib/mocha.js:216:14)
    at Mocha.run (/ProjectA/node_modules/mocha/lib/mocha.js:468:10)
    at Object.<anonymous> (/ProjectA/node_modules/mocha/bin/_mocha:403:18)
    at Module._compile (module.js:398:26)
    at Object.Module._extensions..js (module.js:405:10)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Function.Module.runMain (module.js:430:10)
    at startup (node.js:141:18)
    at node.js:980:3

এখানে প্যাকেজ.জসন থেকে আমার পরীক্ষার কমান্ডটি দেওয়া হয়েছে:

"test": "mocha --compilers js:babel-core/register '+(test|src)/**/*Spec.js'"

এই স্ট্যাকওভারফ্লো পোস্টটি অনুরূপ তবে কমান্ড লাইনটি ব্যবহারের জন্য আমার কোনও সমাধান দেয় না: নবেড_মডিউলগুলি বাবেল সহ একটি মডিউল আমদানি করুন কিন্তু ব্যর্থ হয়েছে


বাবেলের জন্য <6

এই সমস্যাটি সমাধানের সবচেয়ে সহজ উপায় হ'ল:

  1. npm install babel-preset-es2015 --save-dev
  2. প্রকল্পের .babelrc বিষয়বস্তু সহ .babelrc করুন:

    {
     "presets": [ "es2015" ]
    }

নিশ্চিত হয়ে নিন যে আপনি "- কম্পাইলার জেএস: ব্যাবেল-কোর / রেজিস্টার" পরামিতি দিয়ে মোচা চালাচ্ছেন।

বাবেল 6/7 + এর জন্য

  1. npm install @babel/preset-env --save-dev
  2. প্রকল্পের .babelrc বিষয়বস্তু সহ .babelrc করুন:

    {
     "presets": [ "@babel/preset-env" ]
    }

নিশ্চিত করুন যে আপনি - --compilers js:babel-register বাবেল --compilers js:babel-register (বাবেল 6) বা - --compilers js:@babel/register বাবেল --compilers js:@babel/register (বাবেল 7) পরামিতি সহ মোচা চালাচ্ছেন




আমার জন্য কি কাজ করেছে তা এখানে। - --compilers পতাকা ব্যবহার করার সময় আমি একটি সতর্কতা পেয়েছি।

অবমানন সতর্কতা: "- কমপ্লেয়ারগুলি" মুচার ভবিষ্যতের সংস্করণে সরানো হবে; আরও তথ্যের জন্য https://git.io/vdcSr দেখুন

তাই আমি এটি - --require পতাকাটি দিয়ে প্রতিস্থাপন করেছি

"test":  "mocha --require babel-core/register --recursive"

এখানে আমার .babelrc :

{
  "presets": ["env"]
}

আমার package.json দেব নির্ভরতা

"devDependencies": {
  "babel-cli": "^6.26.0",
  "babel-preset-env": "^1.7.0",
  "mocha": "^5.2.0",
}

আমি আমার কোডটি import সময় mocha ইনস্টল করেছি এবং ঠিক একই ত্রুটিটি পূরণ করেছি। নিম্নলিখিত ক্রিয়াগুলি করার দ্বারা, সমস্যাটি স্থির হয়েছিল।

npm install babel-core --save-dev
npm install babel-preset-es2015 --save-dev
npm install babel-preset-stage-0 --save-dev

এবং তারপরে একটি .babelrc ফাইল যুক্ত করুন:

{
    "presets": [
        "es2015"
    ]
}

এবং তারপরে এভাবে mocha :

mocha --compilers js:babel-core/register

আমি এই নির্দেশটি আজ সকালে নিম্নলিখিত নির্দেশাবলীর সাথে সমাধান করেছি

এনপিএম মডিউল ইনস্টল করুন

npm install --save-dev @babel/polyfill
npm install --save-dev @babel/register

প্যাকেজ.জসন :

"scripts": {
    "test": "mocha --require @babel/register --require @babel/polyfill src/DesktopApplication/Tests",
  }

.babelrc

{
  "presets": ["@babel/env"]
}

আমি এখানে আরও একটি ES6 + মোচা + বাবেল কনফিগারেশন উত্তর যুক্ত করছি, জুন '19-এর হিসাবে বর্তমান (উত্তর / কমেন্টের তারিখগুলি দেখুন)। মোচা - --compiler পতাকাটি --compiler করেছে এবং আমি যে সংস্করণটি ব্যবহার করছি তা - --compiler পতাকার --compiler অনুপলব্ধ রয়েছে, সিএফ this

মনে রাখবেন যে আমি লিঙ্কযুক্ত পৃষ্ঠাগুলি থেকে সমস্ত প্রাসঙ্গিক বিট অন্তর্ভুক্ত করব না, কারণ মোচা এবং বাবেলের সর্বশেষতম সংস্করণগুলির উপর ভিত্তি করে তাদের মধ্যে কেউই আমাকে একটি পরিষ্কার পরীক্ষা বিল্ডে নিয়ে যায়নি; এই উত্তরে এমন পদক্ষেপগুলি অন্তর্ভুক্ত করা উচিত যা আমাকে একটি সফল পরীক্ষার বিল্ডিংয়ে পেয়েছে।

এখানে থাকা নির্দেশাবলী অনুসরণ করে এবং এই উত্তরে এবং here আমি npm install ব্যবহার করে সর্বনিম্ন সর্বশেষতম ব্যাবেল হিসাবে উপস্থিত হওয়ার চেষ্টা করেছি:

$ npm install --save-dev mocha
$ npm install --save-dev @babel/preset-env

এবং আমি প্যাকেজ.জসনে মোচা অনুরোধটি সামঞ্জস্য করেছি, এরকম:

"scripts": {
    "test": "mocha --compilers js:@babel/register"
}

এর ফলে ত্রুটি হয়েছিল:

× ERROR: --compilers is DEPRECATED and no longer supported.

উপরে হিসাবে, --no-deprecation না --no-deprecation সাহায্য করে না, দয়া করে উপরে --no-deprecation পৃষ্ঠাটি উল্লেখ করুন। সুতরাং this থেকে নির্দেশাবলী অনুসরণ করে আমি প্যাকেজ.জসন সামঞ্জস্য করেছি:

"scripts": {
    "test": "mocha --require js:@babel/register"
}

এবং ব্যাবেল মডিউলগুলি সনাক্তকরণ সম্পর্কিত ত্রুটিগুলি দেখতে শুরু করেছে, যেমন:

× ERROR: Cannot find module '@babel/register'

এই মুহুর্তে আমি অগ্রগতি না হওয়া পর্যন্ত ব্যাবেল প্যাকেজগুলি ইনস্টল করতে শুরু করেছি। আমি বিশ্বাস করি যে সম্পূর্ণ ইনস্টলটি এমন কিছু:

$ npm install --save-dev @babel/preset-env @babel/register @babel/core

প্রয়োজনীয় সর্বশেষ পরিবর্তনটি ছিল প্যাকেজ.জেসনে মোচা আহবানটি আপডেট করে, জেএস js: উপসর্গটি মুছে ফেলা:

"scripts": {
    "test": "mocha --require @babel/register"
}

কেন এটি প্রয়োজনীয় তা আমি উত্তর দিতে পারি না: যদি কেউ এর উত্তর দিতে পারে তবে দয়া করে একটি মন্তব্য দিন এবং আমি আমার উত্তরটি আরও ভাল তথ্যের সাথে আপডেট করব।

শেষ কাজটি আমি প্রজেক্ট ডিরেক্টরিতে একটি বিষয়বস্তু দিয়ে একটি।

{
    "presets" : ["@babel/preset-env"]
}

এটিকে কী বলেছিল তা আমি স্মরণ করতে পারি না তবে আমি বিশ্বাস করি যে এটি আমার টেস্ট.জেজে import মূলশব্দটি স্বীকৃতি না দেওয়ার বিষয়ে অভিযোগ চালিয়ে যাচ্ছিল oc উপরে হিসাবে, যদি কেউ এর উত্তর দিতে পারে তবে দয়া করে একটি মন্তব্য দিন এবং আমি আমার উত্তরটি আরও ভাল তথ্যের সাথে আপডেট করব।


আরও ভবিষ্যতের প্রমাণ সেটিং জন্য

npm install babel-preset-latest --save-dev

এবং .babelrc এ

{
  "presets": [ "latest" ]
}

উল্টোদিকে...

npm install babel-preset-es2015 --save-dev

এবং

{
 "presets": [ "es2015" ]
}

বাবেল 7 এবং মোচা 4 ব্যবহার করার জন্য কারও কারও কাছে প্যাকেজের নাম কিছুটা বদলে গেছে এবং গৃহীত উত্তরটি কিছুটা পুরানো। আমার যা করতে হবে তা হ'ল:

npm install @babel/register --saveDev

এবং --require @babel/register যোগ --require @babel/register package.json পরীক্ষার লাইনে package.json

"test": "./node_modules/mocha/bin/mocha --require @babel/polyfill --require @babel/register './test/**/*.spec.js'"

@babel/polyfill কিছু জিনিস ঠিক করে যেমন @babel/polyfill / কার্যকারিতার জন্য অপেক্ষা করে যদি আপনি সেগুলি ব্যবহার করছেন।

আশা করি যে কাউকে সাহায্য করবে :)


ব্যাবেল with.XX এর সাথে করার সবচেয়ে সহজ উপায়টি আমি এনআইসি ব্যবহার করা এবং তারপরে pckage.json একটি helper ফাইল যুক্ত করার চেষ্টা pckage.json

সুতরাং আমি এখানে ব্যবহার কি

package.json

{
  ....
  "scripts": {
    "test": "nyc mocha --reporter tap 'test/**/*.spec.js'"
  },
  "devDependencies": {
    "babel-cli": "^6.24.0",
    "babel-core": "^6.24.0",
    "babel-loader": "^6.4.0",
    "babel-preset-env": "^1.2.2",
    "babel-preset-es2015": "^6.24.0",
    "babel-preset-react": "^6.23.0",
    "babel-preset-react-hmre": "^1.1.1",
    "babel-preset-stage-2": "^6.22.0",
    "babel-register": "^6.24.0",
    "babel-runtime": "^6.23.0",
    "chai": "^3.5.0",
    "mocha": "^3.2.0",
    "nyc": "^10.1.2",
    "webpack": "^2.3.3",
    "webpack-config": "^7.0.0",
    "webpack-dashboard": "^0.3.0",
    "webpack-dev-server": "^2.4.2"
  },
  "nyc": {
    "all": true,
    "include": [
      "src/**/*.js"
    ],
    "cache": true,
    "require": [
      "./test/helper/registerBabel.js"
    ]
  }
}

babelrc

{
  "presets": [
    "es2015", //remove the {modules: false} it doesn't work with this
    "stage-2"
  ]
}

registerBabel.js

/* eslint-disable import/no-commonjs, import/unambiguous */
require('babel-register')();

এখন আপনি আপনার পরীক্ষাগুলিতে বা যেখানে আপনার প্রয়োজন সেখানে এস 6 ব্যবহার করতে সক্ষম হবেন। আমার সব ব্যর্থ হয়;)

তারপরে npm run test যা nyc mocha --reporter tap 'test/**/*.spec.js'


মোচা 4 এর জন্য বাবেল নির্দেশাবলী ব্যবহার করে অফিসারের নিম্নলিখিত নির্দেশাবলী সহ আমি এই সকালে এই সমস্যাটি সমাধান করেছি:

এনপিএম মডিউল ইনস্টল করুন

npm install --save-dev babel-polyfill
npm install --save-dev babel-preset-env
npm install --save-dev babel-register

বা একটি একক আদেশ:

npm i -d babel-polyfill babel-preset-env babel-register

প্যাকেজ.জসন :

"scripts": {
    "test": "mocha --require babel-polyfill --require babel-register"
  }

.babelrc

{
  "presets": ["env"]
}

--compilers হয়।

আমার সহজ সমাধান:

npm install --save-dev babel-core

এবং প্যাকেজ.জেসনে আপনার পরীক্ষার স্ক্রিপ্টটি এটি যুক্ত করুন:

  "scripts": {
    "test": "mocha --require babel-core/register ./test/**/*.js -r ./test-setup.js"
  },