【问题标题】:node.js - cannot import packages that are installednode.js - 无法导入已安装的包
【发布时间】:2020-09-02 13:13:58
【问题描述】:

我正在尝试将 moments 导入到我的 main.js 文件夹中,但遇到了困难。 我安装了npm install moment --save。我已经尝试过require('moment')import moment from 'moment' 语法。当我尝试使用require 时,我遇到了一些我记不太清的错误,但它们很常见。我已经搜索了 YouTube 和 SO,但没有一个解决方案可以解决它。这是我的package.json

{
  "name": "project",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "type": "module",
  "dependencies": {
    "live-server": "^1.2.1",
    "lodash": "^4.17.20",
    "moment": "^2.27.0",
    "node-sass": "^4.14.1",
    "requirejs": "^2.3.6"
  },
  "devDependencies": {
    "sass": "^1.26.10",
  },
  "scripts": {
    "compile:sass": "node-sass sass/main.scss style.css -w",
    "devserver": "live-server",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

index.html 文件中,我有type="module" 允许ES6 导入。我做错了什么?

对不起!忘记了我得到的错误(当前) TypeError: Error resolving module specifier: moment

当尝试使用require 时: ReferenceError: require is not defined

【问题讨论】:

  • 很抱歉,您忽略了问题的关键部分,即您遇到的实际错误。您能否再次重现该问题并使用您得到的实际错误更新您的问题?我的意思是,如果错误是“那么常见”,那么您一开始就不会问这个问题,对吗?
  • 我添加了我收到的当前错误。其他错误是尝试使用require,但如果可能,id 而不是使用import 语法
  • 当您切换到 ES6 模块时,您不应该使用 require,您可以通过在 package.json 文件中添加 "type": "module" 来实现。使用模块导入 moment.js 的正确语法是:import moment from 'moment';。尝试以这种方式导入它,让我们看看错误是什么。
  • 我正在使用import moment from 'moment',这给了我错误。这是我困惑的根本原因。
  • 我也不明白为什么你的 package.json 中有一个明确的 requirejs 依赖项。尝试删除那个,node.js 中内置了 require 语法。还要确保您使用的是最新版本的 node,旧版本的 node 不支持 ES6 模块语法。

标签: javascript node.js import


【解决方案1】:

好吧,在深入挖掘之后,让我们总结一下:

在您的情况下,您只想在main.js 文件中使用moment.js,您在使用脚本标记的index.html 文件中引用该文件。这与node.js 无关,只是您可以使用npm 下载moment 依赖项。为了实现您想要做的事情,我建议您执行以下操作:

使用 npm 安装 moment 依赖

npm install moment

moment.js 文件从node_modules/moment/lib 文件夹(不是src!)复制到项目中的文件夹(fe.scripts)。您可以手动或使用脚本/任务运行器来执行此操作。

在 main.js 文件中,您使用引用该文件

import moment from './moment.js';

并在您的 index.html 文件中使用

引用 main.js 文件
<script type="module" src="./main.js"></script>

正如我们所讨论的。这是一些体力劳动,但对于进行一些快速试验,这有时就足够了。如果您要开始实际构建一个完整大小的应用程序,我强烈建议您添加一个像 webpack 这样的模块捆绑器,它可以让您摆脱所有这些工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-21
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多