mirror of
https://github.com/Tencent/Hippy.git
synced 2026-10-27 04:09:31 +08:00
176 lines
5.6 KiB
JavaScript
176 lines
5.6 KiB
JavaScript
/*
|
|
* Tencent is pleased to support the open source community by making
|
|
* Hippy available.
|
|
*
|
|
* Copyright (C) 2017-2022 THL A29 Limited, a Tencent company.
|
|
* All rights reserved.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
const path = require('path');
|
|
const alias = require('@rollup/plugin-alias');
|
|
const { babel } = require('@rollup/plugin-babel');
|
|
const cjs = require('@rollup/plugin-commonjs');
|
|
const replace = require('@rollup/plugin-replace');
|
|
const { nodeResolve } = require('@rollup/plugin-node-resolve');
|
|
const flow = require('rollup-plugin-flow-no-whitespace');
|
|
|
|
const VueVersion = require('vue/package.json').version;
|
|
const hippyVuePackage = require('../packages/hippy-vue/package.json');
|
|
const cssLoaderPackage = require('../packages/hippy-vue-css-loader/package.json');
|
|
const nativeComponentsPackage = require('../packages/hippy-vue-native-components/package.json');
|
|
const routerPackage = require('../packages/hippy-vue-router/package.json');
|
|
const { banner, resolvePackage } = require('./utils');
|
|
const bannerStr = `\n * (Using Vue v${VueVersion})`;
|
|
const bannerStrAndHippyVueString = `\n * (Using Vue v${VueVersion} and Hippy-Vue v${hippyVuePackage.version})`;
|
|
|
|
|
|
function resolveVue(p) {
|
|
return path.resolve(__dirname, '../node_modules/vue/src/', p);
|
|
}
|
|
|
|
const aliases = {
|
|
vue: resolveVue('core/index'),
|
|
compiler: resolveVue('compiler'),
|
|
web: resolveVue('platforms/web'),
|
|
core: resolveVue('core'),
|
|
shared: resolveVue('shared'),
|
|
sfc: resolveVue('sfc'),
|
|
he: path.resolve(__dirname, '../packages/hippy-vue/src/util/entity-decoder'),
|
|
'@vue': resolvePackage('hippy-vue'),
|
|
'@router': resolvePackage('hippy-vue-router'),
|
|
'@css-loader': resolvePackage('hippy-vue-css-loader'),
|
|
'@native-components': resolvePackage('hippy-vue-native-components'),
|
|
};
|
|
|
|
const builds = {
|
|
'@hippy/vue': {
|
|
entry: resolvePackage('hippy-vue', 'src/index.js'),
|
|
dest: resolvePackage('hippy-vue', 'dist/index.js'),
|
|
format: 'es',
|
|
banner: banner('@hippy/vue', hippyVuePackage.version, bannerStr),
|
|
},
|
|
'@hippy/vue-css-loader': {
|
|
entry: {
|
|
index: resolvePackage('hippy-vue-css-loader', 'src/index.js'),
|
|
'css-loader': resolvePackage('hippy-vue-css-loader', 'src/css-loader.js'),
|
|
},
|
|
dir: resolvePackage('hippy-vue-css-loader', 'dist'),
|
|
entryFileNames: '[name].js',
|
|
format: 'cjs',
|
|
moduleName: 'hippy-vue-css-loader',
|
|
banner: banner('@hippy/vue-css-loader', cssLoaderPackage.version, bannerStrAndHippyVueString),
|
|
external(id) {
|
|
return id in Object.keys(cssLoaderPackage.dependencies);
|
|
},
|
|
},
|
|
'@hippy/vue-native-components': {
|
|
entry: resolvePackage('hippy-vue-native-components', 'src/index.js'),
|
|
dest: resolvePackage('hippy-vue-native-components', 'dist/index.js'),
|
|
format: 'es',
|
|
moduleName: 'hippy-vue-native-components',
|
|
banner: banner('@hippy/vue-native-components', nativeComponentsPackage.version, bannerStrAndHippyVueString),
|
|
},
|
|
'@hippy/vue-router': {
|
|
entry: resolvePackage('hippy-vue-router', 'src/index.js'),
|
|
dest: resolvePackage('hippy-vue-router', 'dist/index.js'),
|
|
format: 'es',
|
|
moduleName: 'hippy-vue-router',
|
|
banner: banner('@hippy/vue-router', routerPackage.version, bannerStrAndHippyVueString),
|
|
},
|
|
};
|
|
|
|
function genConfig(name) {
|
|
const opts = builds[name];
|
|
const config = {
|
|
input: opts.entry,
|
|
external: opts.external,
|
|
treeshake: {
|
|
moduleSideEffects: id => !id.startsWith('weex'),
|
|
},
|
|
plugins: [
|
|
replace({
|
|
preventAssignment: true,
|
|
values: {
|
|
__WEEX__: false,
|
|
__VERSION__: VueVersion,
|
|
'let _isServer': 'let _isServer = false',
|
|
'process.env.VUE_VERSION': `"${VueVersion}"`,
|
|
'process.env.HIPPY_VUE_VERSION': `"${hippyVuePackage.version}"`,
|
|
// enable vue-devtools if __VUE_DEVTOOLS_GLOBAL_HOOK__ exist
|
|
'inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__': 'global.__VUE_DEVTOOLS_GLOBAL_HOOK__',
|
|
},
|
|
}),
|
|
flow(),
|
|
alias({
|
|
entries: aliases,
|
|
}),
|
|
nodeResolve({
|
|
preferBuiltins: true,
|
|
}),
|
|
cjs(),
|
|
babel({
|
|
presets: [
|
|
[
|
|
'@babel/env',
|
|
{
|
|
targets: {
|
|
chrome: '57',
|
|
},
|
|
},
|
|
],
|
|
],
|
|
plugins: [
|
|
[
|
|
'@babel/plugin-transform-runtime',
|
|
{
|
|
corejs: false,
|
|
},
|
|
],
|
|
],
|
|
babelHelpers: 'runtime',
|
|
}),
|
|
].concat(opts.plugins || []),
|
|
output: {
|
|
entryFileNames: opts.entryFileNames,
|
|
dir: opts.dir,
|
|
file: opts.dest,
|
|
format: opts.format,
|
|
banner: opts.banner,
|
|
name: opts.moduleName || 'hippy-vue',
|
|
exports: 'auto',
|
|
},
|
|
onwarn: (msg, warn) => {
|
|
if (!/Circular/.test(msg)) {
|
|
warn(msg);
|
|
}
|
|
},
|
|
};
|
|
|
|
if (opts.env) {
|
|
config.plugins.push(replace({
|
|
'process.env.NODE_ENV': JSON.stringify(opts.env),
|
|
}));
|
|
}
|
|
|
|
Object.defineProperty(config, '_name', {
|
|
enumerable: false,
|
|
value: name,
|
|
});
|
|
|
|
return config;
|
|
}
|
|
|
|
module.exports.getAllBuilds = () => Object.keys(builds).map(genConfig);
|