如何在浏览器中使用npm模块?是否可以在本地(PC)中使用它们?-JavaScript

Bor*_*rja 6 javascript module node.js npm npm-install

我是新手npm modulenode.js所以对我来说真的很难。

我有一个js代码很多点,对于每个点,我都想得到最近的城市。

为此,在另一个问题(使用大数组进行反向地理编码是最快的方法?-javascript和性能)中,一个用户建议我使用两个npm模块

const kdbush = require('kdbush');
const geokdbush = require('geokdbush');

// I've stored the data points as objects to make the values unambiguous
const cities = [
  { name: "Abano Terme (PD)", latitude: 45.3594, longitude: 11.7894 },
  { name: "Abbadia Cerreto (LO)", latitude: 45.3122, longitude: 9.5928 },
  { name: "Abbadia Lariana (LC)", latitude: 45.8992, longitude: 9.3336 },
  { name: "Abbadia San Salvatore (SI)", latitude: 42.8800, longitude: 11.6775 },
  { name: "Abbasanta (OR)", latitude: 40.1250, longitude: 8.8200 }
];

// Create the index over city data ONCE
const index = kdbush(cities, ({ longitude }) => longitude, ({ latitude }) => latitude);

// Get the nearest neighbour in a radius of 50km for a point with latitude 43.7051 and longitude 11.4363
const nearest = geokdbush.around(index, 11.4363, 43.7051, 1, 50);
Run Code Online (Sandbox Code Playgroud)

问题是这是我第一次这样做。除了我是意大利语,英语说得不太好,在意大利语Google中,没有什么:(

您能告诉我如何使用这些模块吗?

我必须Node.js在服务器上安装吗?

是否可以在本地PC上使用模块?

Wal*_*ung 45

browserify是正确的方向,但我花了相当多的精力来制定实际的解决方案。我为此总结了一个简短的博客,这里有一些快速回顾:

假设您想在 HTML 中使用emailjs-mime-parserbuffernpm 库。

  1. 安装所需的一切
npm install -g browserify
npm install emailjs-mime-parser
npm install buffer
Run Code Online (Sandbox Code Playgroud)
  1. 写一个简单main.js的包装器:
var parse = require('emailjs-mime-parser').default
var Buffer = require('buffer').Buffer
global.window.parseEmail = parse
global.window.Buffer = Buffer
Run Code Online (Sandbox Code Playgroud)
  1. 使用编译一切 browserify
browserify main.js -o bundle.js
Run Code Online (Sandbox Code Playgroud)
  1. 现在,您可以bundle.js在 HTML 文件中使用。
<html>
<head>
<script src='bundle.js'></script>
<script>
console.log(window.parseEmail);
console.log(window.Buffer);
</script>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 找到了这个很酷的网站:https://wzrd.in,您可以在浏览器中完成所有这些操作,无需安装任何东西。 (2认同)

Kev*_*nTD 15

如果您的情况是 100% 前端,不依赖于某些服务器,您可以使用 ES Modules 语法,并结合使用https://www.skypack.dev/将 Common JS 中的模块转换为 ES Modules 。

使用标签type="module"内的属性script才能正常工作非常重要,该服务也在本地工作

<script type="module">
// Use 'https://cdn.skypack.dev/' + 'npm package name' + '@version its optional'
import random from 'https://cdn.skypack.dev/canvas-sketch-util@1.10.0/random'

console.log('A random number: ', random.range(1,10))
</script>
Run Code Online (Sandbox Code Playgroud)

在很多情况下,https://unpkg.com/无法处理https://www.skypack.dev/可以处理的情况,因此我建议在前端使用它

我在这里写了一个稍微完整的答案: How can I use a CommonJS module on JSFiddle?


Net*_*964 12

https://unpkg.com/

您可以使用unpkg.com从 NPM 包中提取内容。例如,如果您需要获取 Polymer 纸按钮 Web 组件,您可以指向:https : //unpkg.com/@polymer/paper-button@3.0.1

  • Unpkg 是一个缓慢的 CDN。JSDelivr 是一个稍微好一点的替代方案,它还支持 github,以防万一。 (9认同)

Flu*_*ice 9

是的,您可以直接在浏览器上使用npm模块。

Browserify是一个很好的选择。

直接从他们的页面上获取:

浏览器没有定义require方法,但是Node.js有。使用Browserify可以编写使用require的代码,就像在Node中使用它一样。

现在您还有其他问题:

我必须在服务器上安装Node.js吗?

是。但是,您只需要节点来安装browserify并将您的javascript捆绑到一个文件中,即可直接将其包含在html中。因此,一旦有了捆绑的文件,就可以在没有节点的任何地方提供它。

是否可以在本地PC上使用模块?

是! 您可以在本地PC上执行几乎所有操作。例如,您可以将其用作开发用途的服务器,并在其中运行node.js服务器。