--- title: "NPM" description: "在你的 Nuxt 应用中从 NPM 加载 IIFE 脚本。" canonical_url: "https://nuxt-scripts.zhcndoc.com/scripts/npm" last_updated: "2026-05-22T14:11:56.805Z" --- ## 背景 使用 NPM 文件时,通常会将它们作为 `package.json` 文件中的 node_module 依赖包含进来。然而,优化这些脚本的加载较为困难,需要从单独的代码块动态导入模块,并且仅在需要时加载。它还会拖慢构建速度,因为模块需要被转译。 `useScriptNpm` 注册脚本抽象了这一过程,使你可以通过一行代码加载那些已经导出为立即调用函数(IIFE)的脚本。 在许多情况下,将脚本作为 `package.json` 文件中的依赖可能更合理,但对于不常用或对应用不关键的脚本,这可以是一个很好的替代方案。 一开始,我们可以将使用此脚本视为 `useHead` 组合式函数的替代方案。以下代码示例展示了该抽象层次。 ```ts [注册脚本 useScriptNpm] useScriptNpm({ packageName: 'js-confetti', file: 'dist/js-confetti.browser.js', version: '0.12.0', }) ``` ```ts [useScript] useScript('https://cdn.jsdelivr.net/npm/js-confetti@0.12.0/dist/js-confetti.browser.js') ``` ```ts [useHead] useHead({ script: [ { src: 'https://cdn.jsdelivr.net/npm/js-confetti@latest/dist/js-confetti.browser.js' } ] }) ``` ## [`useScriptNpm()`](/scripts/npm) `useScriptNpm` 组合式函数让你可以精细地控制你的网站上 NPM 脚本何时以及如何加载。 ```ts function useScriptNpm>(_options: NpmInput) {} ``` 请参考 [注册脚本指南](/docs/guides/registry-scripts) 了解更多进阶用法。 ### NpmOptions ```ts export const NpmOptions = object({ packageName: string(), file: optional(string()), version: optional(string()), type: optional(string()), }) ``` ### 返回值 要获取所加载脚本的类型,你需要扩展 `useScriptNpm` 函数的类型定义。 ```ts interface SomeApi { doSomething: () => void } useScriptNpm({ packageName: 'some-api' }) ``` ## 示例 更多示例请参见 [教程:加载 js-confetti](/docs/getting-started/confetti-tutorial)。