Как известно, по-умолчанию browserify при создании bundle включает в него и сторонние модули из NPM. Но я бы хотел, чтобы эти модули подгружались с CDN, а в bundle был только мой собственный код. Пробовал опции для browserify: exclude, external, ignore. Но всё это приводило к тому, что сторонние модули не были найдены. Ниже код html:
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title></title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.7/react-dom.min.js"></script>
</head>
<body>
<div id="app">
<p style="color: darkred;">JavaScript is not allowed either in the app error.</p>
</div>
<script src="app.js"></script>
</body>
</html>
Фрагмент кода gulpfile.js:
gulp.task('bundle', ['compile'], () => {
//var b = browserify('build/spa/Main.js', {bundleExternal: false});
var b = browserify('build/spa/Main.js');
b
//.ignore('react')
//.ignore('react-dom')
.bundle()
.pipe(source('app.js'))
.pipe(gulp.dest('dist'));
gulp
.src('src/spa/index.html')
.pipe(gulp.dest('dist'));
});
UPD1. Думаю нужно сделать дополнение. Код JavaScript является результатом компиляции кода на TypeScript с опцией module: commonjs. В коде JavaScript после компиляции появляются вызовы require(). Так вот, если код сторонних модулей не включать в bundle, то этот вызов require() терпит фиаско. С другими типами модулей та же история.
UPD2. Проблему удалось решить самостоятельно. См. ниже.