【问题标题】:How to fix function problems in npm package?如何修复 npm 包中的功能问题?
【发布时间】:2020-10-18 19:40:03
【问题描述】:

我构建了一个简单的 npm 包来处理 URL。当你在本地使用它时它工作得很好,但是当我发布包时,我遇到了许多不同的错误,我将把它写下来,如果你能帮助解决这些问题,那将是完美的。 包可用 [此处][1]。

代码:

var getUrl = function(){
    let originalUrl = window.location.href;
    return originalUrl;
}

var slashDivider = function(){
    let sd = getUrl().split('/');
    return sd;
}

let getProtocol = () => {
    let gp = location.protocol;
    return gp;
}

let domainName = () => {
    let dn = location.hostname;
    return dn;
}

let domainWithProtocol = () => {
    let dwp = location.origin;
    return dwp;
}

let sitePort = () => {
    let sp = location.port;
    return sp;
}

let searchQuery = () => {
    let sq = location.search;
    return sq;
}

let pathName = () => {
    let pn = location.pathname;
    return pn;
}

let hashAddress = () => {
    let hd = location.hash;
    return hd;
}

let StringIndexFinder = (nameOfString) => {
    let stringToArray = nameOfString.split('');
    let stringArrayLength = stringToArray.length;
    let startingIndex = getUrl().indexOf(nameOfString);
    let endIndex = parseInt(stringArrayLength) + parseInt(startingIndex) - 1;
    return "from index " + startingIndex + ", end index " + endIndex ;
} 


let isEncrypted = () => {
    if(getUrl().includes("https")){
        return true;
    } else {
        return false;
    }
}

module.exports = [getUrl, slashDivider, getProtocol, domainName, domainWithProtocol,sitePort,searchQuery, pathName,hashAddress, StringIndexFinder, isEncrypted];

1_我通过npm i ulio --save安装了包,然后像这样调用包函数:

const getUrl = require('ulio');

console.log(getUrl())

我得到了这个错误:

Uncaught TypeError: getUrl is not a function

2_我对包做了一点小改动,删除了所有函数,只保留了第一个函数getUrl,效果很好!!!(为什么?)

const getUrl = require('ulio');

console.log(getUrl()) //output: http://localhost:1234/

然后我添加第二个函数,即 slashDivider,代码如下:

var getUrl = function(){
    let originalUrl = window.location.href;
    return originalUrl;
}

var slashDivider = function(){
    let sd = getUrl().split('/');
    return sd;
} 

module.exports = getUrl;
module.exports = slashDivider;

通过以下代码,我也得到了第二个函数的结果作为第一个函数的结果。

const getUrl = require('ulio');
const slashDivider = require('ulio');

console.log(getUrl())
console.log(slashDivider())

3_ 现在我发布了完整的包(包括所有功能)并在尝试console.log(isEncrypted()) 时收到此错误 错误:

Uncaught TypeError: isEncrypted is not a function

所有功能都是一样的。 我怎样才能解决这些问题,怎样才能使这个包更好? [1]:https://www.npmjs.com/package/ulio

【问题讨论】:

    标签: javascript npm package.json


    【解决方案1】:

    这是因为module.exports 被导出为数组。第一项是getUrl。改用这个:

    const getUrl = require('ulio')[0];
    console.log(getUrl())
    

    当然,除非使用 Browserify 或 Webpack,否则这是行不通的,因为不会定义 window

    一个更好的方法是使用module.exports作为一个对象,像这样:

    module.exports = {
      getUrl: getUrl
      ...
    }
    

    然后,你可以使用这个:

    const { getUrl, someOtherFunction } = require('ulio');
    console.log(getUrl())
    console.log(someOtherFunction())
    

    以下代码:

    const getUrl = require('ulio');
    console.log(getUrl())
    

    不起作用,因为require('ulio')返回一个数组,而数组不能作为函数调用。

    【讨论】:

      猜你喜欢
      • 2019-01-12
      • 2021-03-06
      • 2022-10-20
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 2013-05-24
      • 2018-08-09
      • 1970-01-01
      相关资源
      最近更新 更多