.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 для загрузки кода.