【问题标题】:Unable to deploy lodash无法部署 lodash
【发布时间】:2016-07-06 15:00:42
【问题描述】:

我遇到了 lodash 的问题。当我使用 gulp 进行部署时,我总是遇到同样的错误:

vendors.min.js:3 GET http://127.0.0.1/projects/myproject/lodash 404 (Not Found)

我将库声明到我的 index.html 文件中

<script src="node_modules/lodash/lodash.js"></script>

我将 lodash 导入到我的 typescript 文件

///<reference path="../../../typings/modules/lodash/index.d.ts" />
import * as _ from "lodash";

当我在本地测试我的网站时(通过使用 npm start 启动 lite 服务器),这是可行的。

现在,我想使用 Gulp 部署我的网站。这是我的 gulp 文件

gulp.task('app-bundle', function () {
  var tsProject = ts.createProject('tsconfig.json', {
      typescript: require('typescript'),
      outFile: 'app.js'
  });

  var tsResult = gulp.src([
    'node_modules/angular2/typings/browser.d.ts',
    'typings/main/ambient/firebase/firebase.d.ts',
    'app/**/*.ts'
  ])
    .pipe(ts(tsProject));

  return tsResult.js.pipe(addsrc.append('config-prod.js'))
                    .pipe(concat('app.min.js'))
                    .pipe(uglify())
                    .pipe(gulp.dest('./dist'));
});

gulp.task('vendor-bundle', function() {
    gulp.src([
            'node_modules/es6-shim/es6-shim.min.js',
            'node_modules/systemjs/dist/system-polyfills.js',
            'node_modules/angular2/bundles/angular2-polyfills.js',
            'node_modules/systemjs/dist/system.src.js',
            'node_modules/rxjs/bundles/Rx.js',
            'node_modules/angular2/bundles/angular2.dev.js',
            'node_modules/angular2/bundles/http.dev.js',
            'node_modules/angular2/bundles/router.min.js',
            'node_modules/lodash/lodash.js'

        ])
        .pipe(concat('vendors.min.js'))
        .pipe(uglify())
        .pipe(gulp.dest('./dist'));
});

gulp.task('default',[ 'app-bundle', 'vendor-bundle' ], function() {
  gulp.src('index.html')
    .pipe(htmlreplace({
        'vendor': 'vendors.min.js',
        'app': 'app.min.js'
    }))
    .pipe(gulp.dest('dist'));
});

当我测试我的网站时,出现以下错误:

    vendors.min.js:3 GET http://127.0.0.1/projects/myproject/lodash 404 (Not Found)r @ vendors.min.js:3e.scheduleTask @ vendors.min.js:3e.scheduleMacroTask @ vendors.min.js:3(anonymous function) @ vendors.min.js:3send @ VM3157:3L @ vendors.min.js:4(anonymous function) @ vendors.min.js:4e @ vendors.min.js:3(anonymous function) @ vendors.min.js:4(anonymous function) @ vendors.min.js:4(anonymous function) @ vendors.min.js:5(anonymous function) @ vendors.min.js:5(anonymous function) @ vendors.min.js:5(anonymous function) @ vendors.min.js:5(anonymous function) @ vendors.min.js:5(anonymous function) @ vendors.min.js:4e.invoke @ vendors.min.js:3e.run @ vendors.min.js:3(anonymous function) @ vendors.min.js:3e.invokeTask @ vendors.min.js:3e.runTask @ vendors.min.js:3o @ vendors.min.js:3invoke @ vendors.min.js:3
vendors.min.js:3 Error: XHR error (404 Not Found) loading http://127.0.0.1/projects/myproject/lodash
    Error loading http://127.0.0.1/projects/myproject/lodash as "lodash" from http://127.0.0.1/projects/myproject/services/base-services/base.services
    at o (http://127.0.0.1/projects/myproject/vendors.min.js:4:10124)
    at XMLHttpRequest.L.a.onreadystatechange (http://127.0.0.1/projects/myproject/vendors.min.js:4:10712)
    at XMLHttpRequest.t [as _onreadystatechange] (http://127.0.0.1/projects/myproject/vendors.min.js:3:12638)
    at e.invokeTask (http://127.0.0.1/projects/myproject/vendors.min.js:3:8519)
    at e.runTask (http://127.0.0.1/projects/myproject/vendors.min.js:3:5879)
    at XMLHttpRequest.invoke (http://127.0.0.1/projects/myproject/vendors.min.js:3:9628)

这是我的 SystemJS:

System.config({
  paths: {
    'rxjs/add/observable/*' : 'node_modules/rxjs/add/observable/*.js',
    'rxjs/add/operator/*' : 'node_modules/rxjs/add/operator/*.js',
    'rxjs/*' : 'node_modules/rxjs/*.js'
  },
  map: {
    '@angular' : 'angular2',
    'videogular2' : 'node_modules/videogular2',
    'rxjs': 'node_modules/rxjs',
    'lodash': 'node_modules/lodash'
  },
  packages: {
    map: {
      'rxjs': 'node_modules/rxjs'
    },
    app: {
      format: 'register',
      defaultExtension: 'js'
    },
    node_modules: {
      defaultExtension: 'js'
    },
    lodash:{
      main:'lodash',
      defaultExtension:'js'
    }
  }
});
System.import('app/boot')
      .then(null, console.error.bind(console));

多年来我一直在寻找解决方案,我非常感谢任何帮助:)。

当我部署时,我也会添加该脚本:

document.addEventListener('DOMContentLoaded', function () {
  System.import('boot')
        .then(null, console.error.bind(console));
});

【问题讨论】:

  • 你的 SystemJS 配置怎么样?
  • 嗨,我已经用 SystemJS 配置更新了我的帖子。

标签: typescript angular gulp lodash systemjs


【解决方案1】:

我终于成功了!

  1. 如下创建系统配置:
System.config({
    meta:{
        'vendors.min.js':{
            format:'global'
        }
    },
    map:{
        'lodash':'http://127.0.0.1/js/lodash.min.js'
    }
});
  1. 为 lodash 添加一个 gulp 任务
gulp.task('lodash', function(){
    return gulp.src('node_modules/lodash/lodash.min.js')
        .pipe(gulp.dest('./dist/js'));
});

我希望这对其他人有帮助。

【讨论】:

  • 感谢您的分享。我已经为此苦苦挣扎了一段时间。
猜你喜欢
  • 2022-01-11
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
相关资源
最近更新 更多