【问题标题】:Unable to import js-search in vue js component无法在 vue js 组件中导入 js-search
【发布时间】:2019-09-16 18:30:45
【问题描述】:

我正在尝试在 vue 组件中导入 js-search npm 模块。但每当我这样做时:

import JsSearch from 'js-search'

以上当登录 console.log(JsSearch) 时给出未定义。

我进一步调查了npm module

它的package.json 显示"main": "dist/commonjs/index.js" 该文件如下所示:

'use strict';

Object.defineProperty(exports, "__esModule", {
  value: true
});

var _index = require('./IndexStrategy/index');

Object.defineProperty(exports, 'AllSubstringsIndexStrategy', {
  enumerable: true,
  get: function get() {
    return _index.AllSubstringsIndexStrategy;
  }
});
Object.defineProperty(exports, 'ExactWordIndexStrategy', {
  enumerable: true,
  get: function get() {
    return _index.ExactWordIndexStrategy;
  }
});
Object.defineProperty(exports, 'PrefixIndexStrategy', {
  enumerable: true,
  get: function get() {
    return _index.PrefixIndexStrategy;
  }
});

var _index2 = require('./Sanitizer/index');

Object.defineProperty(exports, 'CaseSensitiveSanitizer', {
  enumerable: true,
  get: function get() {
    return _index2.CaseSensitiveSanitizer;
  }
});
Object.defineProperty(exports, 'LowerCaseSanitizer', {
  enumerable: true,
  get: function get() {
    return _index2.LowerCaseSanitizer;
  }
});

var _index3 = require('./SearchIndex/index');

Object.defineProperty(exports, 'TfIdfSearchIndex', {
  enumerable: true,
  get: function get() {
    return _index3.TfIdfSearchIndex;
  }
});
Object.defineProperty(exports, 'UnorderedSearchIndex', {
  enumerable: true,
  get: function get() {
    return _index3.UnorderedSearchIndex;
  }
});

var _index4 = require('./Tokenizer/index');

Object.defineProperty(exports, 'SimpleTokenizer', {
  enumerable: true,
  get: function get() {
    return _index4.SimpleTokenizer;
  }
});
Object.defineProperty(exports, 'StemmingTokenizer', {
  enumerable: true,
  get: function get() {
    return _index4.StemmingTokenizer;
  }
});
Object.defineProperty(exports, 'StopWordsTokenizer', {
  enumerable: true,
  get: function get() {
    return _index4.StopWordsTokenizer;
  }
});

var _Search = require('./Search');

Object.defineProperty(exports, 'Search', {
  enumerable: true,
  get: function get() {
    return _Search.Search;
  }
});

var _StopWordsMap = require('./StopWordsMap');

Object.defineProperty(exports, 'StopWordsMap', {
  enumerable: true,
  get: function get() {
    return _StopWordsMap.StopWordsMap;
  }
});

var _TokenHighlighter = require('./TokenHighlighter');

Object.defineProperty(exports, 'TokenHighlighter', {
  enumerable: true,
  get: function get() {
    return _TokenHighlighter.TokenHighlighter;
  }
});
//# sourceMappingURL=index.js.map

在那个文件中,我看到没有module.exports,但有各种Object.defineProperty 和几个以_ 开头的变量

AFAIK,javascript 中的下划线只是约定。所以我假设如果我导入它们,下划线变量应该至少在JsSearch 变量中可用,因此它不应该是未定义的(不是吗?)

所以基本上这个 npm 模块如何与 require 一起工作,我应该怎么做才能让它与 import 一起工作?

(我在它的 github repo 上发现了这个问题:https://github.com/bvaughn/js-search/issues/33 也许这有帮助)

【问题讨论】:

  • 也许它是一个客户端搜索库并且jsSearch 变量在window 上可用?这在节点中不起作用。
  • 它的 vue js 应用。所以毫无疑问节点@Kokodoko
  • 文档说要像这样导入它:import * as JsSearch from 'js-search'
  • @rahulserver 你使用了node 标签...
  • @Rudy 哪个文档这么说?

标签: javascript node.js vue.js npm webpack


【解决方案1】:

在这里https://github.com/bvaughn/js-search你可以找到这个包的使用示例

你需要这样导入

import * as JsSearch from 'js-search';

因为在 index.js 的源代码中,您可以看到没有名为 JsSearch 的导出。所以不能这样导入。

【讨论】:

  • 该死!我怎么会错过这个。非常感谢
  • 每个 npm 包在 npmjs.com 上都有自己的页面,右侧可以看到下载次数、版本号和主页。主页是 github 存储库。有时在 github 页面包作者会放更多的信息,所以看看那里真的很有用。
猜你喜欢
  • 2021-09-21
  • 2020-01-24
  • 2019-05-12
  • 2021-03-28
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-09
相关资源
最近更新 更多