.NET Angular с использованием RequireJS

Я создал новое пустое веб-приложение ASP.NET в Visual Studios 2013. У меня есть угловой проект со следующей структурой каталогов:

├───TestProject
│   ├───index.html
│   ├───package.json
│   ├───Web.config
│   ├───app
│   │   ├───app.module.js
│   │   ├───main.js
│   ├───bin
│   ├───node_modules
│   │   ├───google-distance
│   │   │   └───test
│   │   ├───json-stringify-safe
│   │   │   └───test
│   │   ├───qs
│   │   ├───request
│   │   │   └───lib
│   ├───obj
│   │   └───Debug
│   │       └───TempPE
│   ├───Properties
│   └───Scripts
└───packages
    ├───angularjs.1.6.1
    │   └───content
    │       └───Scripts
    │           └───i18n
    │               └───ngLocale
    ├───AngularJS.Core.1.6.1
    │   └───content
    │       └───Scripts
    └───RequireJS.2.3.2
        └───content
            └───Scripts

Вот что мой packages.json похоже:

{
  "name": "google-distance",
  "version": "1.0.1",
  "main": "index",
  "description": "A simple node.js wrapper for Google's Distance Matrix API",
  "author": {
    "name": "Edward Look",
    "email": "edwlook@gmail.com",
    "url": "http://edwardlook.com"
  },
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "https://github.com/edwlook/node-google-distance.git"
  },
  "keywords": [
    "google",
    "maps",
    "distance",
    "matrix",
    "api"
  ],
  "dependencies": {
    "google-distance": "~1.0.1"
  }
}

Я побежал npm install и он создал папку node_modules. На вершине моего main.js файл у меня есть:

var distance = require('../node_modules/google-distance/index.js');

Но каждый раз, когда я загружаю страницу, консоль говорит:

require.js:168 Uncaught Error: Module name "../node_modules/google-distance/index.js" has not been loaded yet for context: _. Use require([])
http://requirejs.org/docs/errors.html#notloaded
    at makeError (require.js:168)
    at Object.localRequire [as require] (require.js:1433)
    at requirejs (require.js:1794)
    at main.js:2

Что я делаю неправильно? Как мне использовать модуль google-distance?

1 ответ

Решение

Обычно вы должны требовать это следующим образом;

var distance = require('google-distance');

Узел будет искать модули следующим образом; Он выполнит поиск в иерархическом каталоге для "node_modules" и "google-distance" следующими способами:

  • ./node_modules/google-distance.js
  • ./node_modules/google-distance/index.js
  • ./node_modules/google-distance/package.json

Кроме того, похоже, что вы должны использовать версию асинхронного обратного вызова require для загрузки этой библиотеки.

require(['google-distance'], function (distance) {
    //package is now loaded.
});

Из требуемого FAQ:

ИМЯ МОДУЛЯ... ЕЩЕ НЕ ЗАГРУЖЕНО ДЛЯ КОНТЕКСТА: ... Это происходит, когда есть вызов require('name'), но модуль 'name' еще не загружен. Если сообщение об ошибке включает Use require([]), то это был вызов require верхнего уровня (не вызов require внутри вызова define()), который должен использовать асинхронную версию callback версии require для загрузки кода.

http://requirejs.org/docs/errors.html

Другие вопросы по тегам