如何使用npm包依赖

时间:2019-04-23 09:02:40

标签: vue.js npm nuxt.js npm-scripts

我正在学习通过创建会话检查功能sessionFn来创建npm软件包,该功能将在会话到期前1分钟弹出一个模态。

该函数可以在主应用程序(nuxtJS应用程序)上按预期工作,但是当我将其用作npm模块时,即使moment被列为npm模块,我也必须传递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
    }
  }
}

用法

这就是我在主应用中使用软件包的方式

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

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

2 个答案:

答案 0 :(得分:1)

由于您将时刻导入函数文件中,因此无需将时刻导入并传递到函数中。您甚至没有在函数中使用传递的参数。因此,您可以放心地通过它。您也没有使用第二个参数,即您传递了to.path,因此您也可以忽略它。

作为建议,您应该安装并使用eslint,它将捕获此类问题。例如,您可以使用create nuxt app用eslint设置nuxt项目。

esm 3.21-3.22中还存在一个错误,该错误阻止commonjs和es6导入一起https://github.com/standard-things/esm/issues/773。在发布新的esm时应该解决此问题

答案 1 :(得分:0)

尝试通过moment使npm i moment --save-dev成为devDependancy,而不是依赖。

这样,仅在开发包时才需要片刻(意味着在开发项目时),而在使用包时则不需要。

希望它可以解决您的问题

for more depth knowledge