En utilisant webpack, j'essaie d'importer isEqual puisque lodash
semble tout importer. J'ai essayé de faire ce qui suit sans succès:
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'
Si vous souhaitez simplement inclure isEqual
et pas le reste des fonctions lodash
(utile pour garder la taille de votre paquet petite), vous pouvez le faire dans ES6;
import isEqual from 'lodash/isEqual'
C'est à peu près la même chose que ce qui est décrit dans la lodash
README , sauf qu'ils utilisent la syntaxe require()
.
var at = require('lodash/at');
Avec Webpack 4 et lodash-es 4.17.7 et supérieurs, ce code fonctionne.
import { isEqual } from 'lodash-es';
Cela est dû au fait que le Webpack 4 prend en charge sideEffects
flag et que lodash-es 4.17.7 et versions supérieures incluent l’indicateur (défini sur false
).
Modifier
À partir de la version 1.9.0, Parcel prend également en charge "sideEffects": false
, threrefore import { isEqual } from 'lodash-es';
est également utilisable en arborescence avec Parcel.
Pas lié à webpack mais je vais l'ajouter ici car beaucoup de gens se tournent actuellement vers TypeScript.
Vous pouvez également importer une fonction unique à partir de lodash en utilisant import isEqual from 'lodash/isEqual';
dans TypeScript avec l'indicateur esModuleInterop
dans les options du compilateur (tsconfig.json).
exemple
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"lib": ["es6", "dom"],
"moduleResolution": "node",
"esModuleInterop": true,
...
}
}
Lodash énumère quelques options dans leur README :
$ 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)
En gros à ceci:
import _add from 'lodash/fp/add'
import _map from 'lodash/map'
const addOne = _add(1)
_map([1, 2, 3], addOne)
$ 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-es en utilisant le lodash cli
$ lodash modularize exports=es -o ./
import { isEqual } from 'lodash-es';
importe la bibliothèque entière. J'utilise Rollup qui devrait faire trembler les arbres par défaut.
Chaque fois que j'ai écrit mes propres modules, cette syntaxe d'importation nommée fonctionne et l'arborescence Rollup réussit, alors je ne comprends pas trop pourquoi cela ne fonctionne pas avec Lodash.
cela a réellement fonctionné pour moi
import { isEqual } from 'lodash';