Tôi đang cố gắng xây dựng một ứng dụng SPA (requirejs, durandal 2, knockout) thành một tệp main-build.js bằng cách sử dụng grunt và tôi đang chạy vào các vấn đề nghiêm trọng với plugin 'văn bản' mà sầu riêng đang sử dụng để tải lượt xem của tôi.Sử dụng r.js để đóng gói ứng dụng SPA có thể tải chế độ xem bằng cách sử dụng 'văn bản'
Trong dev, tôi đang sử dụng thành công 'văn bản' để tải chế độ xem theo cách động theo cách xây dựng ứng dụng sành điệu chuẩn. Sự khác biệt là tôi cần phải làm một số khuôn mẫu phía máy chủ cho các quan điểm và do đó, họ đang thực sự được tạo động. Với ý nghĩ đó, tôi muốn sử dụng r.js để đóng gói các mô hình ứng dụng, xem các mô hình và dịch vụ (thông qua plugin grunt-durandal) thành một tệp duy nhất, nhưng KHÔNG đóng gói các khung nhìn (.html). và vẫn tải chúng tự động khi cần.
Trong cấu hình grunt của tôi, tôi đang sử dụng tùy chọn inlineText: false
- mà tôi đã chọn đang chặn mô-đun 'văn bản! *' Trong bản dựng. Nhưng khi tôi chạy các ứng dụng tôi nhận được:
Uncaught TypeError: undefined is not a function
từ bên text.load
vào dòng sau:
var parsed = text.parseName(name),
nonStripName = parsed.moduleName +
(parsed.ext ? '.' + parsed.ext : ''),
url = req.toUrl(nonStripName), // EXCEPTION THROWN HERE
Tên mô-đun được nạp có vẻ là đúng (nó một '! Văn bản *' một) nhưng ngoài ra tôi không có ý tưởng làm thế nào để tiến hành gỡ lỗi vấn đề này. Tôi đang làm gì sai?
grunt configuraiton của tôi là:
/*global module, require */
module.exports = function (grunt) {
'use strict';
// library that allows config objects to be merged together
var mixIn = require('mout/object/mixIn');
var requireConfig = {
baseUrl: 'App/',
paths: {
'jquery': '../Scripts/jquery-2.1.0',
'knockout': '../Scripts/knockout-3.1.0',
'text': '../Scripts/text',
'durandal': '../Scripts/durandal',
'plugins': '../Scripts/durandal/plugins',
'transitions': '../Scripts/durandal/transitions',
}
};
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
jshint: {
options: {
"-W099": true, // allowed mixed tabs and spaces
"-W004": true, // needed to avoid errors where TS fakes inheritance
ignores: [
'App/main-built.js' // ingore the built/compacted file
]
},
all: [ // run jshint on these files
'gruntfile.js',
'App/**/*.js'
]
},
// TODO: could add jasmine here to do JS testing
clean: {
build: ['build/*']
},
copy: {
scripts: {
src: 'Scripts/**/**',
dest: 'build/'
}
},
durandal: {
main: {
src: [
'App/**/*.*',
'!App/main-built.js', // ignore the built file!
'Scripts/durandal/**/*.js'
],
options: {
name: '../Scripts/almond-custom',
baseUrl: requireConfig.baseUrl,
mainPath: 'App/main',
paths: mixIn(
{},
requireConfig.paths,
{ 'almond': '../Scripts/almond-custom.js' }),
exclude: [],
inlineText: false, // prevent bundling of .html (since we are dynamically generating these for content)
optimize: 'none', // turn off optimisations - uglify will run seperately by grunt to do this
out: 'build/app/main-built.js'
}
}
},
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> \n' +
'* Copyright (c) <%= grunt.template.today("yyyy") %> Kieran Benton \n' +
'*/\n'
},
build: {
src: 'build/App/main.js',
dest: 'build/App/main-built.js'
}
}
}
);
// loading plugin(s)
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-jasmine');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-open');
grunt.loadNpmTasks('grunt-durandal');
// only one grunt task
grunt.registerTask('build', [
'jshint',
'clean',
'copy',
'durandal:main']);
};
Có cách nào để sử dụng r.js để xây dựng gói tối ưu hóa nhưng vẫn bao gồm phiên bản đầy đủ của yêu cầu js (và không phải là hạnh nhân) mà bạn biết không? Tôi không chắc chắn những gì im tốt nhất làm tiếp theo ... –
Hi gai, tôi cũng phải đối mặt với cùng một vấn đề với điều này, nhưng tôi đang sử dụng gulp-durandal.Bạn có thể giúp tôi giải thích/trình bày chi tiết hơn về cách sửa lỗi này không? Tôi rất mới về những điều này. Cảm ơn! –