কীভাবে একটি একক লড্যাশ ফাংশন আমদানি করবেন?


128

ওয়েবপ্যাক ব্যবহার করে, আমি ইস্কুলকে আমদানির চেষ্টা করছি যেহেতু lodashমনে হচ্ছে সবকিছু আমদানি করা হচ্ছে। আমি কোনও সাফল্য ছাড়াই নিম্নলিখিতগুলি করার চেষ্টা করেছি:

import { isEqual } from 'lodash'

import isEqual from 'lodash/lang'

import isEqual from 'lodash/lang/isEqual'

import { isEqual } from 'lodash/lang'

import { isEqual } from 'lodash/lang'


1
না, আমি অন্যান্য ফাংশনগুলিও আমদানি করতে চাই
adang3

2
আমার বোঝার ভিত্তিতে, আপনি এখন একে অপরের এক বা সমস্তগুলি আমদানি করতে পারবেন, কোনও মাঝের জমি নয়। আমি প্যাকেজ.জেডসনে অনেক নির্ভরশীলতা যুক্ত করলেও একে একে পুনরায় দাবি জানাতে পারি, একের পর এক পদ্ধতিটি পরীক্ষা করা এবং আপগ্রেড করা আরও সহজ হবে, তাদের সমস্ত পদক্ষেপের পরিবর্তে
বোরিস চার্পেন্টিয়ার

উত্তর:


205

আপনি lodash.isequalযেমন সম্পূর্ণ লোডাশ প্যাকেজ ইনস্টল না করে একটি একক মডিউল হিসাবে ইনস্টল করতে পারেন:

npm install --save lodash.isequal

ECMAScript 5 এবং কমনজেএস মডিউলগুলি ব্যবহার করার পরে, আপনি এটির পরে এটি আমদানি করুন:

var isEqual = require('lodash.isequal');

ES6 মডিউলগুলি ব্যবহার করে, এটি হ'ল:

import isEqual from 'lodash.isequal';

এবং আপনি এটি আপনার কোডটিতে ব্যবহার করতে পারেন:

const obj1 = {username: 'peter'};
const obj2 = {username: 'peter'};
const obj3 = {username: 'gregory'};

isEqual(obj1, obj2) // returns true
isEqual(obj1, obj3) // returns false

সূত্র: লোডাশ ডকুমেন্টেশন

আমদানির পরে, আপনি আপনার কোডটিতে isEqualফাংশনটি ব্যবহার করতে পারেন । মনে রাখবেন যে নামে একটি বস্তুর অংশ নয় _যদি আপনি এটি এই ভাবে আমদানি করতে, যাতে আপনি না এটি দিয়ে রেফারেন্স _.isEqualসঙ্গে, কিন্তু সরাসরি isEqual

বিকল্প: ব্যবহার lodash-es

@ কিমামুলা দ্বারা চিহ্নিত হিসাবে :

ওয়েবপ্যাক 4 এবং লোড্যাশ-এস 4.17.7 এবং উচ্চতর সহ, এই কোডটি কাজ করে।

import { isEqual } from 'lodash-es';

এর কারণ হ'ল ওয়েবপ্যাক 4 সাইডএফেক্টস পতাকাটি সমর্থন করে এবং lodash-es4.17.7 এবং উচ্চতর পতাকাটি (যা সেট করা আছে false) অন্তর্ভুক্ত।

স্ল্যাশ সহ সংস্করণটি ব্যবহার করবেন না কেন? এই প্রশ্নের অন্যান্য উত্তরগুলি থেকে বোঝা যায় যে আপনি কোনও বিন্দুর পরিবর্তে ড্যাশও ব্যবহার করতে পারেন:

import isEqual from 'lodash/isequal';

এটিও কার্যকর, তবে দুটি ছোট ছোট অপূর্ণতা রয়েছে:

  • আপনাকে পুরো লড্যাশ প্যাকেজটি ইনস্টল করতে হবে ( npm install --save lodashকেবলমাত্র পৃথক ছোট লড্যাশ.ইসিকিওল প্যাকেজ নয়; স্টোরেজ স্পেস সস্তা এবং সিপিইউ দ্রুত, তাই আপনি এটি সম্পর্কে যত্ন নিতে পারেন না
  • ওয়েবপ্যাকের মতো সরঞ্জামগুলি ব্যবহার করার সময় ফলাফলযুক্ত বান্ডিলটি কিছুটা বড় হবে; আমি জানতে পেরেছি যে ন্যূনতম কোড উদাহরণ সহ বান্ডিল আকারগুলি isEqualহ'ল গড়ে 28% বড় (চেষ্টা করা ওয়েবপ্যাক 2 এবং ওয়েবপ্যাক 3, বাবেলের সাথে বা ছাড়া, উগ্লিফাইয়ের সাথে বা ছাড়া)

আমার জন্য কোনও কারণে কাজ করে না, _ is not definedব্যবহার করার সময় আমি পেয়ে যাচ্ছি_.isEquals
adang3

9
@ সিভিডিভি, তবে এটির মতো ব্যবহার করার কথা নয় _.isEqual, আপনার সরাসরি ব্যবহার করা উচিতisEqual
অ্যারেন হোভসপায়ান

1
আপনি কি আসলে মডিউলটি ইনস্টল করেছেন? এনএমপি আই
প্যাট্রিক হুন্ড

1
@ ঠান্ডা যেহেতু এই উত্তরটি প্রচুর পরিমাণে ভোট পেয়েছে, তাই বিন্দু ব্যবহার করার সময় আমি বান্ডিল আকারের তুলনা করার জন্য সময় নিয়েছি (লোডাস ডক্স দ্বারা প্রস্তাবিত হিসাবে) এবং স্ল্যাশগুলি, আমার সম্পাদিত উত্তরটি দেখুন
প্যাট্রিক হুন্ড

1
@ পেট্রিকহুন্ড: এটি খুব আকর্ষণীয়। আমি সম্মত হই যে আপনার ডেভলপমেন্ট মেশিনে পুরো লোডাশের ওভারহেডটি বেশ নগণ্য, বিশেষত যেহেতু এটি npm --save lodash.whateverপ্রতিটি ফাংশনের জন্য পৃথকভাবে চালনার প্রয়োজনীয়তা বাদ দেয় তবে বৃহত্তর বান্ডিল আকারটি অবশ্যই সময়কাল পদ্ধতিটি ব্যবহার করে উপযুক্ত করে তুলতে পারে। আমি আশ্চর্য হয়েছি যে একটি পার্থক্য রয়েছে, তাই আপনি আনন্দিত হন যে আপনি আমাদের জন্য সংখ্যাটি চালিয়েছিলেন।
22:51

64

আপনি যদি কেবলমাত্র isEqualঅন্যান্য lodashক্রিয়াগুলি অন্তর্ভুক্ত করতে চান না (আপনার বান্ডিলের আকার ছোট রাখার জন্য দরকারী), আপনি ES6 এ এটি করতে পারেন;

import isEqual from 'lodash/isEqual'

এই প্রায় কাছাকাছি কি বর্ণিত হচ্ছে হিসাবে একই README ছাড়া সেখানে তারা ব্যবহার সিনট্যাক্স।lodashrequire()

var at = require('lodash/at');

29

ওয়েবপ্যাক 4 এবং লোডাশ-এস 4.17.7 এবং উচ্চতর সহ, এই কোডটি কাজ করে।

import { isEqual } from 'lodash-es';

এর কারণ হ'ল ওয়েবপ্যাক 4 sideEffectsপতাকা এবং লড্যাশ-এস 4.17.7 সমর্থন করে এবং উচ্চতর পতাকাটি অন্তর্ভুক্ত করে (যা সেট করা আছে false)।

সম্পাদন করা

সংস্করণ ১.৯.০ অনুসারে,"sideEffects": false পার্সেলও সমর্থন করে , হুমকিরুপ import { isEqual } from 'lodash-es';পার্সেলের সাথে গাছের কাঁপানোও সম্ভব।


1
দুর্দান্ত, আমি আমার উত্তরে এই তথ্যটি যুক্ত করেছি, আশা করি এটি আপনার সাথে ঠিক আছে 😀
প্যাট্রিক হন্ড

অসাধারণ. এটি ওয়েবপ্যাক ব্যবহার করে আমার বান্ডিলের আকার 78 কেবি থেকে 18 কেবি হ্রাস করতে পারে।
fsevenm

6

ওয়েবপ্যাকের সাথে সম্পর্কিত নয় তবে আমি এটিকে এখানে যুক্ত করব কারণ বর্তমানে প্রচুর লোক টাইপ স্ক্রিপ্টে চলেছে।

আপনি সংকলক বিকল্পগুলিতে পতাকা import isEqual from 'lodash/isEqual';সহ টাইপস্ক্রিপ্ট ব্যবহার করে লোডাশ থেকে একটি ফাংশনও আমদানি করতে পারেন esModuleInterop(tsconfig.json)

উদাহরণ

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es5",
    "lib": ["es6", "dom"],
    "moduleResolution": "node",
    "esModuleInterop": true,
    ...
  }
}

1

Lodash তালিকা তাদের মধ্যে বিকল্প একটি দম্পতি README :

  • Babel-প্লাগইন-lodash

    • লোডাশ এবং ব্যাবেল প্লাগইন ইনস্টল করুন:
    $ npm i --save lodash
    $ npm i --save-dev babel-plugin-lodash @babel/cli @babel/preset-env
    • এটি আপনার যুক্ত করুন .babelrc
    {
      "plugins": ["lodash"],
      "presets": [["@babel/env", { "targets": { "node": 6 } }]]
    }
    • এই রূপান্তর
    import _ from 'lodash'
    import { add } from 'lodash/fp'
    
    const addOne = add(1)
    _.map([1, 2, 3], addOne)

    মোটামুটি এটি:

    import _add from 'lodash/fp/add'
    import _map from 'lodash/map'
    
    const addOne = _add(1)
    _map([1, 2, 3], addOne)
  • lodash-webpack-প্লাগইন

    • লড্যাশ এবং ওয়েবপ্যাক প্লাগইন ইনস্টল করুন:
    $ npm i --save lodash
    $ npm i --save-dev lodash-webpack-plugin babel-core babel-loader babel-plugin-lodash babel-preset-env webpack
    • আপনার কনফিগার করুন webpack.config.js:
    var LodashModuleReplacementPlugin = require('lodash-webpack-plugin');
    var webpack = require('webpack');
    
    module.exports = {
      'module': {
        'rules': [{
          'use': 'babel-loader',
          'test': /\.js$/,
          'exclude': /node_modules/,
          'options': {
            'plugins': ['lodash'],
            'presets': [['env', { 'modules': false, 'targets': { 'node': 4 } }]]
          }
        }]
      },
      'plugins': [
        new LodashModuleReplacementPlugin,
        new webpack.optimize.UglifyJsPlugin
      ]
    };
  • লোডাশ-এএস লড্যাশ ক্লাইটি ব্যবহার করে

    • $ lodash modularize exports=es -o ./

0

এটি আসলে আমার পক্ষে কাজ করেছিল

import { isEqual } from 'lodash';

24
আপনি এখনও এই সিনট্যাক্সটি ব্যবহার করে পূর্ণ লড্যাশ লাইব্রেরি পান। ওপি তার বান্ডিলের আকার হ্রাস করে কেবল ইস্কুল ফান্ট পেতে চায়।
নাইগার্ড

এটি সমস্ত lib আমদানি করবে এবং তারপরে বর্তমান স্কোপটিতে একটি ফাংশন নিষ্কাশন করবে ।
লুকাস লিসিস

0

import { isEqual } from 'lodash-es';পুরো গ্রন্থাগারটি আমদানি করছে। আমি রোলআপ ব্যবহার করছি যা ডিফল্টরূপে গাছের কাঁপানো উচিত।

যখনই আমি আমার নিজস্ব মডিউলগুলি লিখেছি, এই নামযুক্ত আমদানি সিনট্যাক্সটি কাজ করে এবং রোলআপ সাফল্যের সাথে গাছ কাঁপবে, সুতরাং লোদাশের সাথে এটি কেন কাজ করবে না তা নিয়ে আমি কিছুটা বিভ্রান্ত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.