Как использовать зависимость пакета npm - PullRequest
0 голосов
/ 23 апреля 2019

Я учусь создавать пакеты npm, создавая функцию проверки сеанса sessionFn, которая будет всплывать модально за 1 минуту до истечения сеанса.

Функция работает, как и ожидалось, в главном приложении (приложении nuxtJS), но когда я использую ее в качестве модуля npm, я должен передать moment в качестве аргумента, даже если moment указан как зависимость и импортирован на модуле.

Я что-то упустил, почему мой модуль не запускает момент? Я хочу использовать модуль типа sessionFn(this, to.path); вместо sessionFn(this, to.path, moment);, когда я не передаю его, момент не определен

Файлы пакетов

package.json

{
  "name": "hello-stratech",
  "version": "1.0.17",
  "description": "Hello Stratech",
  "main": "index.js",
  "keywords": [
    "npm",
    "hello",
    "stratech"
  ],
  "author": "Simo Mafuxwana",
  "license": "ISC",
  "dependencies": {
    "moment": "^2.22.2"
  }
}

index.js (основной файл js)

import moment from "moment";

module.exports = {
  greeting(name) {
    alert("Hello.. " + name);
  },
  department(dev) {
    ...
  },
  sessionFn(context) {
    const exp = context.$store.state.session.exp;
    let userSystemTime = new Date();
        userSystemTime = moment.utc(userSystemTime)

    const diff = moment(userSystemTime).diff(moment(exp), 'minutes');
    if (diff = 1) {
      // open modal
    }
  }
}

Usage

Вот так я использую пакет в основном приложении

import moment from 'moment';
import { sessionFn } from "hello-stratech";

export default {
  ...
  watch: {
    $route(to) {
      sessionFn(this, to.path, moment);
    }
  }
  ...
}

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

Вам не нужно импортировать и передавать момент в вашу функцию, так как вы импортируете ее в свой файл функции.Вы даже не используете переданный аргумент в своей функции.Таким образом, вы можете просто безопасно не пройти его.Вы также не используете второй аргумент, который вы передаете to.path, поэтому вы тоже можете его опустить.

В качестве предложения вы должны установить и использовать eslint, который будет ловить такие вещи.Вы можете настроить проект nuxt с помощью eslint, используя, например, create nuxt app .

В esm 3.21-3.22 также есть ошибка, препятствующая совместному импорту Commonjs и es6 https://github.com/standard-things/esm/issues/773Это должно быть исправлено, когда выйдет новый esm

0 голосов
/ 23 апреля 2019

Попробуйте сделать moment как devDependancy через npm i moment --save-dev вместо зависимости.

Этот момент понадобится только тогда, когда пакет находится в процессе разработки (то есть, когда вы разрабатываете проект), но не когда он используется.

Надеюсь, это решит вашу проблему

для более глубоких знаний

...