Snowpack 无法从 node_modules 导入 JavaScript

Posted

技术标签:

【中文标题】Snowpack 无法从 node_modules 导入 JavaScript【英文标题】:Snowpack cannot import JavaScript from node_modules 【发布时间】:2021-07-25 11:44:29 【问题描述】:

我目前正在使用 Snowpack 构建/准备应用程序。我正在尝试导入作为dependencies(块)的一部分安装在package.json 文件中的javascript 库,但不知何故Snowpack 没有选择该库。

这是package.json 文件(相关内容的摘录):


  "private": true,
  "type": "module",
  "scripts": 
    "build": "snowpack build",
    "preview": "snowpack dev"
  ,
  "dependencies": 
    "impress.js": "1.1.0"
  ,
  "devDependencies": 
    "snowpack": "3.3.7"
  ,
  "engines": 
    "node": "14.x"
  

snowpack.config.js 仅包含以下几行:

/** @type import("snowpack").SnowpackUserConfig  */
export default 
  devOptions: 
    open: "none",
  ,
  mount: 
    src: 
      url: "/",
    ,
  ,
;

我期待 Snowpack 将 impress.js 库与此 html 文件捆绑在一起:

<!DOCTYPE html>
<html lang="en">
  <head>
    ...
  </head>
  <body>
    <script src="node_modules/impress.js/js/impress.min.js"></script>
    <script src="scripts/global.js" type="module"></script>
  </body>
</html>

有没有办法为此类事情配置 Snowpack?

【问题讨论】:

【参考方案1】:

如果您只是想将 Impress 模块转换为 ESM,您是否考虑过尝试esinstall?

convert.mjs:

import install from 'esinstall';
await install(['impress.js'], );
node convert.mjs

然后在您的 HTML 文件中:

 <script src="web_modules/impress.js"></script>

【讨论】:

当提供某些提示 (type="module") 时,我实际上希望 Snowpack 能够在幕后做这些事情。【参考方案2】:

如果有人遇到与此类似的情况,我发现捆绑Impress.js(以及可能任何其他已经/尚未模块化的库)的方式是在 JavaScript 文件中仅import 它(注意HTML script 标签中的type="module"):

<!DOCTYPE html>
<html lang="en">
  <head>
    ...
  </head>
  <body>
    <script src="scripts/global.js" type="module"></script>
  </body>
</html>
import "impress.js";

impress(); // ...bootstraps/initializes Impress.js

【讨论】:

以上是关于Snowpack 无法从 node_modules 导入 JavaScript的主要内容,如果未能解决你的问题,请参考以下文章

Snowpack 配置仅从 package.json 构建模块

Snowpack 的多个入口点

snowpack woff2 字体无法加载

第1991期替代 webpack?带你了解 snowpack 原理

如何在 VSCode 中设置 pathMapping 以调试 Snowpack 应用程序

聊聊 ESMBundle Bundleless Vite Snowpack