2016-08-26 2 views
-1

Имея простой проект Викистроки, я использую Gulp для создания отдельных файлов JS из моих файлов TS (я делаю это, поскольку у меня есть несколько файлов HTML, которые должны оставаться отдельными).Typcript - включая сторонний код в выпущенном коде

var tsResult = gulp.src('./src/ts/**/*.ts') 
    .pipe(ts(tsProject)); 

return merge([ // Merge the two output streams, so this task is finished when the IO of both operations are done. 
    tsResult.dts.pipe(gulp.dest('release/definitions')), 
    tsResult.js.pipe(gulp.dest('release/js')) 
]); 

Так в моем HTML я буду иметь что-то вроде -

<script src="./js/myTSfileTranspiledToJS.js"></script> 

Допустим, что файл TS была ссылка на 3-й кодовой базы партии, такие как JQuery. Код строит и развертывает отлично без ошибок, но когда я перехожу к вызову метода в моем TS/JS, который содержит jQuery, он терпит неудачу. Это потому, что во время выполнения он не имеет кода jQuery.

Теперь я могу включить код JQuery с использованием тега сценария -

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 

, но я предпочел бы не так. Есть ли способ включить/объединить сторонний код в перекодированные файлы JS.

EDIT

Чтобы было ясно - я ищу, чтобы иметь машинопись проект, который генерирует некоторые JS-файлы и все, что эти JS файлы зависят должны быть в комплекте с ними без необходимости загружать их по отдельности. Так что если A.js требует B.js, то я хочу, чтобы сборка увидела это и включила B.js с A.js, чтобы сохранить меня, добавляя B.js в некоторый html-файл. Как ответ ниже предложил - Broswerify, но я еще не понял этого в моей настройке.

+0

Если голосующий голос - укажите причину. Наименее вероятно, если я смогу сделать Q яснее, если потребуется. – delp

ответ

0

Ответ на этот вопрос на мой вопрос - использовать webpack, а приведенная ниже ссылка - яркий пример, который показывает как создать проект «Видимая» и включить в него библиотеку сторонних разработчиков, такую ​​как jQuery, здесь: http://www.jbrantly.com/typescript-and-webpack/

В настоящее время это имеет один недостаток в том, что он работает с конфигурацией tsd.json, которая теперь устарела в пользу использования typings.json.

Все еще он отвечает на этот вопрос, даже если он ведет к другому.

1

Вы можете просто сделать что-то вроде here, где вы добавляете тег сценария в документ с JavaScript:

<script type="text/javascript"> 
document.write("\<script src='//ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js' type='text/javascript'>\<\/script>"); 
</script> 

Другой метод должен был бы использовать Browserify или RequireJS. Однако вы должны всегда проверять лицензию любого проекта, который вы включили в свой. Это не было бы ничего необычного, чтобы обеспечить Get Started блока кода и включает в себя

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script> 

в него с другой стороны, и это то, что я рекомендую, как много людей использует Jquery также самостоятельно в их проектах JS.

+0

Ваш первый вариант по-прежнему связан с добавлением/связыванием сценария, который я пытаюсь избежать. Я использую jQuery в качестве примера, поскольку сторонний код, который не размещен нигде, который я буду использовать, находится в том же модульном формате, поэтому я основываю все собранные знания вокруг этого. Так что я уцениваю первый вариант (я уже вроде как делаю это), второй вариант - браузер, который я просматриваю. Он может это сделать, но не уверен, как все попытки до сих пор не сработали. – delp

+0

У вас возникли проблемы с настройкой браузера или с помощью jQuery после того, как вы связали его? – maprambo

+0

Его обозреватель - я думаю. Думайте, что ваш ответ на использование Browserify - это то, что мне нужно, так как вложение всего этого в один файл (например, в упакованный файл). Так что любая версия lib, которую я использую в моем упакованном коде, будет использовать версию, не использующую мой упакованный код, который должен знать об этом. – delp

0

Использование mainbowerfiles в глотке (запряженных в JQuery с дачей) Установить JQuery с дачей

bower install --save jquery  

В HTML

<script src="./js/site.min.js"></script> 

в файле глотком

var gulp = require('gulp'), 
    uglify = require("gulp-uglify"), //uglify 
    filter = require("gulp-filter"), //filters 
    concat = require("gulp-concat"), //concat files 
    mainBowerFiles = require('main-bower-files'); //auto get bower modules 
var paths = {}; 
paths.jsSource = mainBowerFiles().concat(["js/myTSfileTranspiledToJS.js"]); 
paths.baseReleaseFolder = "js"; 
paths.baseJSReleaseFile = "site.min.js"; 
gulp.task("min:js", function() { 
    var jsFilter = filter('**/*.js', { restore: true }); 
    return gulp 
     .src(paths.jsSource) 
     .pipe(jsFilter) 
     .pipe(sourcemaps.init({loadMaps:true})) 
     .pipe(uglify()) 
     .pipe(concat(paths.baseReleaseFolder + "/" + paths.baseJSReleaseFile)) 
     .pipe(sourcemaps.write(".")) 
     .pipe(gulp.dest(".")) 
     .pipe(jsFilter.restore); 
    }); 
+0

Я могу посмотрим, как это будет работать, но это не идеальное решение. Его еще один шаг (bower), и вы все равно должны добавить эту ссылку js на страницу html. Идеальное решение будет включать в себя некоторую конфигурацию, которая будет смотреть на мой проект TS, который уже имеет узел jQuery node_module & включен в папку с образцами - так что между этими двумя точками я ожидаю, что он сможет подключаться. – delp

+0

Если у вас есть jquery, установленный npm (никогда не указано), вы уже просто пропустите шаги bower и включите свой файл из node_modules, а не загрузите его через mainbowerfiles, с той же разницей. Вы также можете использовать CDN в глобусах вместо файлов. –

+0

Вы можете проверить здесь, как использовать cdns в gulp -> https://www.npmjs.com/package/gulp-cdnizer –

Смежные вопросы