Мой вариант использования
У меня есть модуль миксина utils, который внедряет lodash как метод во все .vue
( отдельные файловые компоненты ) компонентов:
// utilsMixin.js
import _ from 'lodash';
import moment from 'moment';
export default {
computed: {
_: () => _,
moment: () => moment,
},
};
// main.js
// ...
import utilsMixin from './utilsMixin';
Vue.mixin(utilsMixin);
Таким образом, все мои проекты могут использовать _
и moment
в качестве методов.
Проблема
Если я использую _
в части <template>
, без линтеравыдает, поскольку _
скрыт внутри this
переменная от vue:
// MyFancyComponent.vue
<template>
<myComponent
v-for="item in _.get(this, 'myObject.collection', [])"
>
<div> {{ item }} </div>
</myComponent>
Но когда я использую его в <script>
части:
// MyFancyComponent.vue
// ...
<script>
export default {
name: 'MyFancyComponent',
methods: {
find: ()=> _.find // [eslint] '_' is not defined. [no-undef]
};
</script>
Эслинт жалуется на [eslint] '_' is not defined. [no-undef]
проблем, но я все еще могу использовать его без импорта _
, и я могу остановить жалобу Линтера, объявив глобальный lodash:
/* global _ */
Обратите внимание, что у меня все еще есть другие .js
файлы, которые не имеютlodash как глобальный, и мне нужно linter, чтобы жаловаться, если я использую lodash там:
Ожидаемое поведение
Я ожидаю, что '_' будет обнаружен как глобальная переменная только в моих vue Single File Components,но быть неопределенным в моих файлах JavaScript (и поэтому мне нужно будет импортировать lodash в .js
файлах).
Интуитивно понятное решение
Я ожидал бы, что смогу настроить глобальные переменные внутри .eslintrc.js
, которые будут работать только внутри однофайловых компонентов.В качестве подхода это может выглядеть так:
// .eslintrc.js
// ...
globals: {
vue: {
'_': false,
moment: false
},
js: {
process: false,
isFinite: true
}
},
// ...