JS npm包,无法在模块外使用import语句

时间:2019-12-01 06:23:06

标签: javascript npm webpack

我想使用此npm软件包https://github.com/nefe/number-precision,请按照以下步骤操作,但不起作用。

  1. npm install number-precision --save--dep

  2. import NP from 'number-precision'require()在我的JS文件第一行,错误消息将如下所示: 无法定义要求&&导出不能在模块外部使用import语句。

  3. <script src="node_modules/number-precision/build/index.iife.js">import NP from 'number-precision </script>

    它不会显示任何错误消息,但是在我的js文件中,NP方法仍然不起作用。

  4. <script src="/workout.js"></script>并放在我的js文件第一行import NP from 'number- precision'

    我明白了:

    拒绝从“ http://0.0.0.0:2000/node_modules/number-”执行脚本 precision /',因为其MIME类型('text / html')不可执行,并且是严格的MIME类型 检查已启用。

    如何在我的js文件中正确执行此npm软件包?

2 个答案:

答案 0 :(得分:2)

要在浏览器中使用导入,执行导入的文件需要

a)包含在type="module"中:

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

b)它仅适用于远程script(即具有src属性),不适用于嵌入式脚本。

还请注意,您不能在浏览器中从node_modules速记引用文件,仅在与Node一起运行时才有效。

因此,在exercise.js中,像这样开始:

import 'https://github.com/nefe/number-precision/blob/master/build/index.iife.js';

不幸的是,该库作者似乎没有提供真正的ES6模块版本(I've just opened an issue on that),因此您无法按照页面的建议进行操作并将脚本导入变量NP

执行类似上面所示的导入的脚本应该可以为您工作,并在全局名称空间中公开该库。

答案 1 :(得分:0)

如果要使用独立的<script>标记,请查看iife.js的内容:

https://github.com/nefe/number-precision/blob/master/build/index.iife.js

var NP = (function (exports) {
'use strict';

// ...

return exports;

}({}));

它将创建一个全局NP变量,因此无需导入,只需将其放在首位即可。

<script src="./index.iife.js"></script>

(将src更改为index.iife.js的正确路径,但是您希望对其进行结构化处理)

如果您想将其与Webpack一起使用,对我来说效果很好。安装软件包后,请在您的入口点import对其进行包装:

// src/index.js
import NP from 'number-precision'
console.log(NP.round(5, 5));

然后运行Webpack捆绑代码:

npx webpack

,然后将在dist/main.js(或类似位置)中产生一个可用的捆绑包。然后在您的网站上链接该捆绑​​软件。