【问题标题】:Where to place/find the systemjs.config.js file in an angularJS2 project?在 angularJS2 项目中在哪里放置/查找 systemjs.config.js 文件?
【发布时间】:2017-02-14 06:40:15
【问题描述】:

我是 Angular 2 的新手,并试图在我的项目中使用 ng2-datetime-picker。现在,在我运行项目时安装了 ng2-datetime-picker 包后,出现 404 错误,说明 ng2-datetime-picker not found,在浏览了一些博客之后,我知道我必须添加systemjs.config.js 文件中的配置,但是当我浏览我的项目时,我在我的项目中看不到任何 systemjs.config.js 文件。所以我的问题是,

  1. systemjs.config.js 文件在哪里?
  2. 下面的代码是 systemjs.config.js 文件吗

    System.import('app').catch(function (err) { console.error(err); });

  3. 如果是,那么如何将地图和包添加到此文件中

    map['ng2-datetime-picker'] = 'node_modules/ng2-datetime-picker/dist'; 包['ng2-datetime-picker'] = { main: 'ng2-datetime-picker.umd.js', defaultExtension: 'js' } 更新 1

这是我的 systemjs.config.js 文件

(function (global) {
    System.config({
        paths: {
            // paths serve as alias
            'npm:': 'node_modules/'
        },
        // map tells the System loader where to look for things
        map: {
            // our app is within the app folder
            app : 'ScriptsApp', // 'dist',
            // 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',
            'ng2-datetime-picker': 'npm:ng2-datetime-picker'
        },
        // packages tells the System loader how to load when no filename and/or no extension
        packages: {
            app: { main: './boot.js', defaultExtension: 'js' },
            rxjs: { defaultExtension: 'js' },
            'ng2-datetime-picker': { main: 'ng2-datetime-picker.umd.js', defaultExtension: 'js' }
        }
    });
})(this);

并且在 index.js 文件中添加的引用是

 <!-- Polyfills for older browsers -->
    <script src="https://unpkg.com/core-js/client/shim.min.js"></script>
    <script src="https://unpkg.com/zone.js@0.7.4?main=browser"></script>
    <script src="https://unpkg.com/systemjs@0.19.39/dist/system.src.js"></script>
    <script src="https://cdn.rawgit.com/angular/angular.io/b3c65a9/public/docs/_examples/_boilerplate/systemjs.config.web.js"></script>
    <script src="systemjs.config.js"></script>
    <script>
        System.import('app').catch(function (err) { console.error(err); });
    </script>

这是我在添加 systemjs.config.js 文件和 index.html 文件中的引用后遇到的错误

【问题讨论】:

  • 你在用angular-cli吗?
  • 不,我没有使用 angular-cli,抱歉回复晚了

标签: angular


【解决方案1】:

您需要创建一个“systemjs.config.js”文件并从 index.html 加载它,就像一个常规脚本:

 <script src="systemjs.config.js"></script>

确保在配置脚本之前还包含 System.JS:

<script src="node_modules/systemjs/dist/system.src.js"></script>

以下脚本加载第一个模块:

System.import('app').catch(function (err) { console.error(err); });

默认情况下(根据您的 systemjs.config.js),SystemJS 会查找 app.js 或 app/main.js。

在您的 systemjs.config.js 文件中,您希望将节点包映射到存在 index.js 或 package.json 的路径,该路径指示模块所在的位置。该模块应与您打算使用的模块加载器兼容:AMD、UMD、CommonJS、SystemJS、es6 等

以下内容应该在您的 systemjs.config.js 文件中起作用:

'paths': {
    'npm:':'node_modules/'
},

'map': {
     'ng2-datetime-picker': 'npm:ng2-datetime-picker'
      ...
},
'packages':  {
     'ng2-datetime-picker': 'dist/ng2-datetime-picker.umd.js'
 }

或者,您可以直接映射 UMD 文件:

'paths': {
    'npm:':'node_modules/'
},

'map': {
     'ng2-datetime-picker': 'npm:ng2-datetime-picker/dist/ng2-datetime-picker.umd.js'
      ...
}

以下内容仅适用于 CommonJS/AMD/SystemJS,因为 index.js 使用 'require' 语法:

'paths': {
    'npm:':'node_modules/'
 },

'map': {
     'ng2-datetime-picker': 'npm:ng2-datetime-picker'
      ...
},
'packages':  {
     'ng2-datetime-picker': 'dist/index.js'
 }

编辑

这应该可行:

    // packages tells the System loader how to load when no filename and/or no extension
    packages: {
        app: { main: 'boot.js', defaultExtension: 'js' },
        rxjs: { defaultExtension: 'js' },
        'ng2-datetime-picker': { main: 'dist/ng2-datetime-picker.umd.js', defaultExtension: 'js' }
    }

【讨论】:

  • 我已经在你提到的 system.src.js 文件旁边添加了 systemjs.config.js,但现在我收到 /ScriptsApp/boot.js 的 404 错误。我正在更新我的问题中的 systemjs.config.js 文件以供您参考...谢谢
  • 我认为您没有更新您的问题。 “主”路径中应包含“dist”。
  • 主路径是什么意思?它是 systemjs.config.js 文件中的对象吗?thannx
  • 在我上次编辑中,我有 'ng2-datetime-picker': { main: '*dist*/ng2-datetime-picker.umd.js',但在你的问题中,你没有' t
【解决方案2】:

对于那些正在寻找systemjs.config.js 内容的人。这将与此类似,您可以根据需要对其进行配置。

/**
 * System configuration for Angular 2 samples
 * Adjust as necessary for your application needs.
 */
(function(global) {
  // map tells the System loader where to look for things
  var map = {
    'app':                        'app', // 'dist',
    '@angular':                   'node_modules/@angular',
    'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api',
    'rxjs':                       'node_modules/rxjs'
  };
  // packages tells the System loader how to load when no filename and/or no extension
  var packages = {
    'app':                        { main: 'main.js',  defaultExtension: 'js' },
    'rxjs':                       { defaultExtension: 'js' },
    'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' },
  };
  var ngPackageNames = [
    'common',
    'compiler',
    'core',
    'forms',
    'http',
    'platform-browser',
    'platform-browser-dynamic',
    'router',
    'router-deprecated',
    'upgrade',
  ];
  // Individual files (~300 requests):
  function packIndex(pkgName) {
    packages['@angular/'+pkgName] = { main: 'index.js', defaultExtension: 'js' };
  }
  // Bundled (~40 requests):
  function packUmd(pkgName) {
    packages['@angular/'+pkgName] = { main: 'bundles/' + pkgName + '.umd.js', defaultExtension: 'js' };
  }
  // Most environments should use UMD; some (Karma) need the individual index files
  var setPackageConfig = System.packageWithIndex ? packIndex : packUmd;
  // Add package entries for angular packages
  ngPackageNames.forEach(setPackageConfig);
  var config = {
    map: map,
    packages: packages
  };
  System.config(config);
})(this);

你的 index.html 看起来像:(注意 .js 文件的顺序)

<head>
    <meta charset="UTF-8">
    <title>My Angular 2 App!</title>

    <!-- css -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/flatly/bootstrap.min.css">
    <style>body { padding: 50px 0; }</style>

    <!-- js -->
    <!-- load the dependencies -->
    <script src="node_modules/core-js/client/shim.min.js"></script>
    <script src="node_modules/zone.js/dist/zone.js"></script>
    <script src="node_modules/reflect-metadata/Reflect.js"></script>

    <!-- load our angular app with systemjs -->
    <script src="node_modules/systemjs/dist/system.src.js"></script>
    <script src="systemjs.config.js"></script>
    <script>
        System.import('app').catch(function(err) { console.error(err); });
    </script>
</head>

【讨论】:

    猜你喜欢
    • 2010-11-01
    • 2018-01-18
    • 2018-01-10
    • 1970-01-01
    • 2012-05-14
    • 2018-09-04
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多