首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >systemjs-builder中的路径解析

systemjs-builder中的路径解析
EN

Stack Overflow用户
提问于 2016-09-01 13:33:28
回答 1查看 981关注 0票数 3

我的项目结构是这样的:

代码语言:javascript
复制
/node_modules

/client
|---/app
|   |---/app.module.ts
|   |---/main.ts
|---/systemjs.config.js
|---/index.html

/server
|---/server.js

/tools
|---/builder.js

/package.json

我用的是angular2-rc5

我使用快递服务器公开了一些目录,并将它们映射到以下路由:

代码语言:javascript
复制
/client         =>    /
/node_modules   =>    /

因此,当用户从浏览器访问“/”时,他得到的是/client/index.html文件。

index.html上,baseUrl设置如下:

代码语言:javascript
复制
<base href="/">

系统is是这样导入的:

代码语言:javascript
复制
<script src="systemjs.config.js"></script>
<script>
  System.import('app');
</script>

systemjs.config.js上,应用程序的映射如下:

代码语言:javascript
复制
var map = {
  'app': 'app',
  '@angular': '@angular'
}

现在,我正在尝试将我的应用程序与systemjs捆绑在一起,脚本builder.js如下所示:

代码语言:javascript
复制
var SystemBuilder = require('systemjs-builder');
var builder = new SystemBuilder();

builder.loadConfig('client/systemjs.config.js')
    .then(function(){
        var outputFile = './client/assets/js/bundle.min.js';
        return builder.buildStatic('app', outputFile, {
            minify: true,
            mangle: false,
            rollup: true
        });
    })
    .then(function() {
        console.log('bundle built successfully!');
    });

现在的问题是,我的服务器中的路由与我的项目结构不一样。因此,当我在builder.js中指定'app‘时,它实际上试图找到/app而不是/client/app

其中一项工作是在systemjs.config中为浏览器和非浏览器操作设置两个不同的映射,如下所示:

代码语言:javascript
复制
var isPublic = typeof window != "undefined";
var map = {
  'app': 'app',
  '@angular': (isPublic)? '@angular':'../node_modules/@angular'
}

但是由于我的baseURL设置为/client,所以我不能真正映射到node_modules/@angular;我必须将目录向上并定位它(即../node_modules/@angular)。但这么做向我展示了:

Error: Unable to calculate canonical name to bundle file:///usr/node_modules/@angular/platform-browser-dynamic//bundles/platform-browser-dynamic.umd.js. Ensure that this module sits within the baseURL or a wildcard path config.

我不希望node_modulesclient被路由到/,这样我的最终用户就不能看到实际的路径。

现在,我如何将这个应用程序与systemjs-builder捆绑?

EN

回答 1

Stack Overflow用户

发布于 2016-09-01 16:22:51

这一错误表明:

确保此模块位于baseURL或通配符路径配置中。

显然,node_modules不能在baseURL中,所以您可以尝试为构建器配置使用第二种方法,添加paths而不是更改map

代码语言:javascript
复制
paths: {
    '@angular/': '../node_modules/@angular/'
}

顺便说一句,消息中的措辞很快就过时了,路径配置中的通配符被废弃。,现在人们应该在那里使用尾斜杠,所以'path/''path*'的首选方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39272994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档