如何修复 npm 包中的功能问题?
How to fix function problems in npm package?
我为 URL 构建了一个简单的 npm 包。当你在本地使用它时,它工作得很好,但是当我发布这个包时,我遇到了许多不同的错误,我将把它写下来,如果你能帮助解决这些问题,那将是完美的。
[此处][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
发生这种情况是因为 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')
returns 一个数组,而数组不能作为函数调用。
我为 URL 构建了一个简单的 npm 包。当你在本地使用它时,它工作得很好,但是当我发布这个包时,我遇到了许多不同的错误,我将把它写下来,如果你能帮助解决这些问题,那将是完美的。 [此处][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
发生这种情况是因为 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')
returns 一个数组,而数组不能作为函数调用。