1

我正在尝试将js-search npm 包导入我的客户端.js文件。他们的文档说要写import * as JsSearch from 'js-search';,但是,这给了我一个Uncaught TypeError: Failed to resolve module specifier "js-search". Relative references must start with either "/", "./", or "../".. 试了很久配置相对路径,最后发现'js-search'是指包名,而不是目录。那么,我必须缺少一些允许我使用此导入行的依赖项吗?谢谢你。

编辑:目录结构:

myproject
├── myproject
├── node_modules\js-search
└── myapp
    ├── static\myapp
    │            └── myapp.js
    └── templates\search
                    └── index.html

编辑:可能是因为我在 localhost 而不是服务器上运行?

4

2 回答 2

2

您使用的 NPM 包很可能是为 node.js 代码制作的包。该import * as JsSearch from 'js-search';行适用于 node.js,不会在浏览器中单独运行。

要在浏览器中运行这些类型的包,您基本上需要使用转译器对其进行转换。最常见的可能是 webpack。

有时,包还包括专门针对浏览器的包中的预构建或缩小版本。something.min.js如果是这种情况,您可能会在目录中找到类似的文件js-search

js-search看起来它可能有这个,因为我在他们的存储库中看到了一个汇总配置文件。Rollup 是 webpack 的替代品。

如果不是这种情况,那么不幸的是,您必须进入构建工具这个非常疯狂的兔子洞。

于 2020-09-19T04:56:27.650 回答
0

您必须使用如下链接您的myapp.js文件type="module"

<script type="module" src="myapp.js"></script>

然后myapp.js你必须js-search使用相对路径导入,node_modules因为你没有使用任何像 webpack 这样的捆绑器。在您的myapp.js文件中,您可以使用js-search如下所示

import * as JsSearch from './node_modules/js-search/dist/esm/js-search.js';

var theGreatGatsby = {
  isbn: '9781597226769',
  title: 'The Great Gatsby',
  author: {
    name: 'F. Scott Fitzgerald'
  },
  tags: ['book', 'inspirational']
};
var theDaVinciCode = {
  isbn: '0307474275',
  title: 'The DaVinci Code',
  author: {
    name: 'Dan Brown'
  },
  tags: ['book', 'mystery']
};
var angelsAndDemons = {
  isbn: '074349346X',
  title: 'Angels & Demons',
  author: {
    name: 'Dan Brown',
  },
  tags: ['book', 'mystery']
};

var search = new JsSearch.Search('isbn');
search.addIndex('title');
search.addIndex(['author', 'name']);
search.addIndex('tags')

search.addDocuments([theGreatGatsby, theDaVinciCode, angelsAndDemons]);

console.log(search.search('The'));    // [theGreatGatsby, theDaVinciCode]
console.log(search.search('scott'));  // [theGreatGatsby]
console.log(search.search('dan'));    // [angelsAndDemons, theDaVinciCode]
console.log(search.search('mystery')); // [angelsAndDemons, theDaVinciCode]
于 2020-09-19T05:16:05.460 回答