作为root用户的子目录中的jspm bundle代码

时间:2015-12-23 22:22:49

标签: jspm

我正在尝试创建一个self-executing bundle的应用程序,但jspm无法找到它正在寻找的内容。

我有以下文件夹结构

enter image description here

src目录包含所有JavaScript,但它由节点托管,就好像它是根。托管jspm_packages就好像它位于根目录内一样,使正常模块import没有可能的路径(即import React from 'react'

enter image description here

该应用程序运行正常,但是当我尝试构建它失败时,因为它不知道查看src目录 jspm_packages目录对于模块。有没有办法解决这个问题,而无需更改文件夹结构或root托管?

我可以将system.config.js文件移动到src,如果这样做可以的话)

修改

如果您将jspm_packages移至src

,这很容易 package.json

中的

"jspm": {
    "directories": {
      "baseURL": "src"
    },
    "configFile": "src/system.config.js"
 }

这会将system.config.jsjspm_packages放在src中(不要在baseUrl中使用system.config.js),捆绑也会有效。这里的主要缺点是src文件夹不再仅包含项目代码;它现在还包含库代码。执行文件夹搜索变得更加困难,我只是想要一个包含所有 my 代码的文件夹。

EDIT2

在更多地考虑这个问题之后,我想我真正想要的是在捆绑期间指定备用path配置的方法。根据我对文档的阅读,这似乎不受支持。

1 个答案:

答案 0 :(得分:2)

您可以将 baseUrl 设置为根(即" /"),然后在路径上设置源代码的路径这样的财产:

System.config({
    baseURL: "/",
    paths: {
        "*": "dist/*",
        "github:*": "jspm_packages/github/*",
        "npm:*": "jspm_packages/npm/*"
    }
})

可以看到完整的工作示例here

此外,如果您需要更改路径仅用于捆绑,您可以在gulp任务中使用jspm-cli并覆盖您的构建器配置,如下所示:

var jspm = require('jspm');

gulp.task('task', function () {
    var builder = new jspm.Builder();
    builder.loadConfigSync('pathToYourConfigFile');
    builder.config({
        paths: {
            '*': 'pathToYourCode'
        }
    });

    builder.bundle('yourOptionsHere');
}