#javascript
#javascript
Вопрос:
У меня есть небольшая программа nodejs, подобная следующей
const angles = require('angles');
console.log(angles.difference(angles.degree(90), angles.degree(30));
И еще один небольшой файл библиотеки, angles.js
function difference(a, b) {
return a - b;
}
function degree(d) {
return d;
}
module.exports = {difference: difference, degree: degree};
Как я могу встроить второй исходный файл в один объединенный, например, что-то вроде этого.
const angles = function(module) {
function difference(a, b) {
return a - b;
}
function degree(d) {
return d;
}
module.exports = {difference: difference, degree: degree};
}({}).exports;
console.log(angles.difference(angles.degree(90), angles.degree(30));
Я попробовал browserify, но он добавил много преамбулы с уродливым / уменьшенным кодом. Что, если я просто хочу что-то простое, как это? Как это можно сделать? Я понимаю, что есть много угловых случаев, которые вы можете создать там, где это невозможно, но давайте предположим, что программа, а также библиотечные файлы всегда так хорошо организованы, как это сделать? Есть ли подходящая библиотека?
Комментарии:
1. Почему бы просто не разделить их и не использовать модули так, как вы это делаете? Объединение кода узла в один файл на самом деле не является обычной практикой, поскольку он предположительно выполняется на сервере или в командной строке, поэтому нет никаких накладных расходов на его доставку по сети. Вы можете сделать это с помощью Gulp (или просто
cat
), но это может привести к проблемам с конфликтующими идентификаторами.2. Это для компилятора pascal -> js, поэтому было бы необходимо просто иметь что-то вроде этого. Я, вероятно, просто напишу что-нибудь сам, как план B. Проверьте это здесь: vidstige.github.io/pascaljs
3. О, очень интересно. Тогда я сообщу вам реальный ответ.
Ответ №1:
Rollup был бы хорошим средством для этого. Этот шаблон работает нормально, но может сделать больше, чем вам нужно. Эта конфигурация свертки barebones мало что делает для искажения:
import commonjs from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';
export default [
{
input: 'src/index.js',
output: [
{ file: './output.js', format: 'cjs' },
],
plugins: [
resolve(),
commonjs()
]
}
];
Если вы установите rollup
и эти два плагина и добавите их в свой проект, вы можете запустить с rollup -c
, и он создаст один пакет. Два плагина предназначены для работы модулей CJS, потому что Rollup хочет использовать ESM.
Это результат вашего кода с этой конфигурацией свертки:
'use strict';
function difference(a, b) {
return a - b;
}
function degree(d) {
return d;
}
var angles = {difference: difference, degree: degree};
console.log(angles.difference(angles.degree(90), angles.degree(30)));
Ответ №2:
я надеюсь, что это будет полезно для вас:
const angles = {
difference: (a, b) => a - b,
degree: (d) => d
};
console.log(angles.difference(angles.degree(90), angles.degree(30)));
Комментарии:
1. Вопрос был о том, как автоматизировать встраивание подобным образом, а не копировать-вставлять ожидаемый результат.