2016-11-14 1 views
0

Я получаю 404 Не найдено, когда JS-файл требует другого JS-файла, а в заявлении require он не указывает расширение .js.404, когда JS-файл требует другого JS-файла без расширения .js

У меня есть файл с именем CalendarUtils.js, который требует некоторых модулей из финиковых FNS:

module.exports = factory(require("date-fns/add_days/index"));

я получаю 404:

[1] 16.11.14 10:45:55 404 GET /lib/date-fns/add_days/index

Если изменить CalendarUtils. js as:

module.exports = factory(require("date-fns/add_days/index.js"));

Тогда он работает.

Мне интересно, почему это происходит. Это происходит в нескольких местах, и я не хотел бы вносить изменения во всем мире. Я использую Angular2.

Мой-FNS индексный файл:

gaurav:application gaurav$ tree build/lib/date-fns/add_days/ 
build/lib/date-fns/add_days/ 
└── index.js 

Пожалуйста, задать мне любой вопрос, если это необходимо. Большое спасибо.

System файл конфигурации для angular2 знать расположение файлов:

(function (global) { 
    System.config({ 
     paths: { 
      // paths serve as alias 
      'npm:': 'lib/' 
     }, 
     // map tells the System loader where to look for things 
     map: { 
      // our app is within the app folder 
      app: 'app', 
      // angular bundles 
      '@angular/core': 'npm:@angular/core/bundles/core.umd.js', 
      '@angular/common': 'npm:@angular/common/bundles/common.umd.js', 
      '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js', 
      '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js', 
      '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js', 
      '@angular/http': 'npm:@angular/http/bundles/http.umd.js', 
      '@angular/router': 'npm:@angular/router/bundles/router.umd.js', 
      '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js', 
      // other libraries 
      'rxjs': 'npm:rxjs', 
      'date-fns': 'npm:date-fns', 
      'angular-calendar': 'npm:angular-calendar/dist/umd/angular-calendar.js', 
      'angular-resizable-element': 'npm:angular-resizable-element/dist/umd/angular-resizable-element.js', 
      'calendar-utils': 'npm:calendar-utils/dist/umd/calendarUtils.js' 
     }, 
     // packages tells the System loader how to load when no filename and/or no extension 
     packages: { 
      app: { 
       main: './main.js', 
       defaultExtension: 'js' 
      }, 
      rxjs: { 
       defaultExtension: 'js' 
      } 
     } 
    }); 
})(this); 

ответ

0

Найдено ответа:

мне нужно указать defaultExtension в systemjs конфигурационного файла:

packages: { 
     app: { 
      main: './main.js', 
      defaultExtension: 'js' 
     }, 
     rxjs: { 
      defaultExtension: 'js' 
     }, 
     'date-fns': { 
      defaultExtension: 'js' 
     } 
    } 
0

Вы должны использовать относительные пути (или абсолютные пути), когда требует локальных файлов проекта:

module.exports = factory(require("./date-fns/add_days/index"));

В противном случае, require() будет обрабатывать его, как имя модуля, и искать установленный модуль с именем date-fns/add_days/index и, очевидно, не удастся.

Кроме того, в этом случае вы можете ommit имени index.js файла, потому что require() уже ищет index.js, когда требуется каталог:

module.exports = factory(require("./date-fns/add_days"));

Надеется, что это помогает.

+0

дата-FNS папка находится под node_modules в то время как развитие .. и он находится в папке Lib во время службы. Поэтому я не могу использовать относительный путь. У меня есть конфигурация системы для angular2, чтобы найти местоположение файла в обновленном вопросе. Файл Config работает для всех модулей, кроме date-fns. Я помещаю файл конфигурации в обновленный исходный вопрос. –

+0

Angular2 находит местоположение файла index.js без относительного пути из-за конфигурации angular2. Я просто не понимаю, почему он не находит его без расширения .js. –