Как скомпилировать typescript в javascript, а затем в 1 файл с помощью скриптов npm

Мой текущий файл package.json целиком.

"scripts": {
    "build": "webpack",
    "start": "tsc && concurrently \"npm run tsc:w\" \"npm run lite\"",
    "lite": "lite-server",
    "postinstall": "typings install",
    "tsc": "tsc",
    "tsc:w": "tsc -w",
    "typings": "typings",
    "build:css": "node-sass --output-style compressed --include-path scss scss/lifeleveler.scss app/assets/css/app.css",
    "build:css-expand": "node-sass --include-path scss scss/lifeleveler.scss app/assets/css/app.css",
    "watch:css": "nodemon -e scss -x \"npm run build:css\"",
    "watch:css:expand": "nodemon -e scss -x \"npm run build:css-expand\"",
    "build:js": "browserify dist/main.js > dist/lifeleveler.app.js",
    "watch": "npm run watch:css & npm run watch:js",
    "watch:js": "onchange '/dist/**/*.js' -p -- npm run build:js"
},

Я пытаюсь иметь 1 единственный скрипт watch, который будет запускать облегченный сервер, создавать файлы .ts .js и .css.

Прямо сейчас у меня есть systemJS и tsc, генерирующие файлы .js, когда я редактирую или создаю новые файлы машинописного текста.

Как только эти файлы javascript будут сгенерированы из tsc:w, они попадают в папку dist. После того, как они будут обновлены там, я хотел бы удалить их и объединить в 1 файл lifeleveler.app.js на основе main.js внутри dist.

Пока что я не могу правильно совместить свои задачи выше..

Каталог моей папки

enter


Я также думаю, что мой подход неверен, у меня может быть 2 окна терминала. 1 смотрит TSX -> js, а другой за SASS-> CSS.

Затем, в конце, когда я буду готов запустить сборку, возможно, тогда моя задача build:js.

Однако мне нужно будет заменить блоки в моем файле index.html, как бы вы это сделали?

<html>
<head>
    <meta charset="UTF-8">
    <title>LifeLeveler</title>
    <meta name="description" content="Level up in the journey of life.">
    <link rel="stylesheet" href="app/assets/css/app.css">
    <!-- load the dependecies -->
    <script src="node_modules/core-js/client/shim.min.js"></script>
    <script src="node_modules/zone.js/dist/zone.js"></script>
    <script src="node_modules/reflect-metadata/Reflect.js"></script>
    <!-- load our angular app with systemjs -->
    <script src="node_modules/systemjs/dist/system.src.js"></script>
    <script src="systemjs.config.js"></script>
    <script>
        System.import('app').catch(function(err) { console.log(err); });
    </script>
    <!-- <script src="dist/lifeleveler.app.js"></script> -->
</head>
<body class="container">

    <my-app></my-app>

</body>
</html>

tsconfig

"compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false,
    "rootDir": "app/",
    "outFile": "./dist/main.js",
    "outDir": "dist"
},
"sourceMap": true

person Leon Gaban    schedule 11.02.2017    source источник
comment
Разве вы не можете использовать что-то вроде npmjs.com/package/gulp-uglify?   -  person Rajind Ruparathna    schedule 17.02.2017


Ответы (2)


Вы можете изменить свой tsconfig.json :

{
    "compilerOptions": {
        "target": "ES5",
        "rootDir": "app/",
        "outFile": "./dist/main.js"
    }
}

Сначала используйте tsc:w для компиляции в один файл и build:js для минимизации до dist/lifeleveler.app.js.

Изменить: обратите внимание, что outFile нельзя использовать вместе с "module": "commonjs", см. этот вопрос

person Sing    schedule 21.02.2017
comment
Спасибо, но хм, я попробовал это и получил эту ошибку: error TS6082: Only 'amd' and 'system' modules are supported alongside --outFile. Я разместил свой файл tsconfig.json в своем вопросе. - person Leon Gaban; 21.02.2017
comment
вам нужно удалить модуль: commonjs - person Sing; 23.02.2017
comment
Хм, все еще получаю ошибку, npm run twc:w работает, но когда я запускаю npm start, я получаю это: node_modules/@angular/common/src/pipes/async_pipe.d.ts(44,38): error TS2304: Cannot find name 'Promise не могли бы проверить мое полное репо здесь? github.com/leongaban/lifeleveler.io - person Leon Gaban; 23.02.2017
comment
А, спасибо! Разобрался, мне нужно было правильно отредактировать мой индексный файл, а также один из моих модулей был сломан. Хорошо, следующий шаг — выяснить сценарии npm для изменения моего индексного файла для производства :) Большое спасибо! - person Leon Gaban; 23.02.2017

Взгляните на это решение: https://github.com/jquintozamora/react-typescript-webpack2-cssModules-postCSS

Важные файлы: package.json tsconfig.json файлы webpack структура модулей приложений

Надеюсь, это поможет!

person José Quinto Zamora    schedule 21.02.2017
comment
Спасибо! Но причина, по которой я хотел использовать только скрипты NPM, заключалась в том, чтобы устранить необходимость в сборщике, таком как веб-пакет. Единственное, что я не могу понять, как сделать прямо сейчас, это скомпилировать все в 1 файл. После того, как часы TS соберут JS из .ts - person Leon Gaban; 21.02.2017