Scratch二次开发——如何创建单独的Scratch作品展示页?

如何创建单独的Scratch作品展示页?

 

创建展示页面的jsx文件?

配置webpack.config.js编译生成展示页面


创建展示页面的jsx文件?

     创建project.jsx的内容和css样式,加入src/playground文件中。

     

const DEFAULT_PROJECT_ID = '80';

const Project = ({isPlayerOnly, projectId}) => (
    <Box className={classNames(styles.stageOnly)}>
        <GUI
            isPlayerOnly={isPlayerOnly}
            projectId={projectId}
            isCreator={false}
            isFullScreen={false}
        />
    </Box>
);

Project.propTypes = {
    isPlayerOnly: PropTypes.bool,
    projectId: PropTypes.string
};

const mapStateToProps = state => {
    const pid = window.location.hash.substring(1) || DEFAULT_PROJECT_ID;
    return{
        isPlayerOnly: state.scratchGui.mode.isPlayerOnly,
        projectId:pid
    }
};

const mapDispatchToProps = dispatch => ({
    onSeeInside: () => dispatch(setPlayer(false))
});

const ConnectedProject = connect(
    mapStateToProps,
    mapDispatchToProps
)(Project);

// note that redux's 'compose' function is just being used as a general utility to make
// the hierarchy of HOC constructor calls clearer here; it has nothing to do with redux's
// ability to compose reducers.
const WrappedProject = compose(
    AppStateHOC,
    HashParserHOC
)(ConnectedProject);

const appTarget = document.createElement('div');
document.body.appendChild(appTarget);

ReactDOM.render(<WrappedProject isPlayerOnly/>, appTarget);

获取地址栏中的#id:    const pid = window.location.hash.substring(1).

通过id请求后台显示指定的作品内容。

配置webpack.config.js编译生成展示页面

    对webpack.config.js 的module.exports=[]  进行修改配置,然后 npm run build重新编译scratch  (react.js)

    

 defaultsDeep({}, base, {
        entry: {
            'lib.min': ['react', 'react-dom'],
            'gui': './src/playground/index.jsx',
            'blocksonly': './src/playground/blocks-only.jsx',
            'compatibilitytesting': './src/playground/compatibility-testing.jsx',
            'player': './src/playground/player.jsx',
            'project': './src/playground/project.jsx'
        },
       plugins: base.plugins.concat([
            new webpack.DefinePlugin({
                'process.env.NODE_ENV': '"' + process.env.NODE_ENV + '"',
                'process.env.DEBUG': Boolean(process.env.DEBUG),
                'process.env.GA_ID': '"' + (process.env.GA_ID || 'UA-000000-01') + '"'
            }),
            new HtmlWebpackPlugin({
                chunks: ['lib.min', 'gui'],
                template: 'src/playground/index.ejs',
                title: '小小鲁创客Scratch编程考级练习场',
                sentryConfig: process.env.SENTRY_CONFIG ? '"' + process.env.SENTRY_CONFIG + '"' : null
            }),
            new HtmlWebpackPlugin({
                chunks: ['lib.min', 'blocksonly'],
                template: 'src/playground/index.ejs',
                filename: 'blocks-only.html',
                title: '小小鲁创客Scratch编程考级练习场: Blocks Only Example'
            }),
            new HtmlWebpackPlugin({
                chunks: ['lib.min', 'compatibilitytesting'],
                template: 'src/playground/index.ejs',
                filename: 'compatibility-testing.html',
                title: '小小鲁创客Scratch编程考级练习场: Compatibility Testing'
            }),
            new HtmlWebpackPlugin({
                chunks: ['lib.min', 'player'],
                template: 'src/playground/index.ejs',
                filename: 'player.html',
                title: '小小鲁创客Scratch编程考级练习场: Player Example'
            }),
            new HtmlWebpackPlugin({
                chunks: ['lib.min', 'project'],
                template: 'src/playground/index.ejs',
                filename: 'project.html',
                title: '小小鲁创客Scratch编程考级练习场'
            }),
            new CopyWebpackPlugin([{
                from: 'static',
                to: 'static'
            }]),
            new CopyWebpackPlugin([{
                from: 'node_modules/scratch-blocks/media',
                to: 'static/blocks-media'
            }]),
            new CopyWebpackPlugin([{
                from: 'extensions/**',
                to: 'static',
                context: 'src/examples'
            }]),
            new CopyWebpackPlugin([{
                from: 'extension-worker.{js,js.map}',
                context: 'node_modules/scratch-vm/dist/web'
            }])
        ])
    })

   将创建的单页面prject.jsx配置进去,chunks:['lib.min','project'].   lib.min.jsx属于库依赖。

   主要修改defaultsDeep的两个字段

  entry

  plugins

   新加入部分

 'project': './src/playground/project.jsx'

 

new HtmlWebpackPlugin({
                chunks: ['lib.min', 'project'],
                template: 'src/playground/index.ejs',
                filename: 'project.html',
                title: '小小鲁创客Scratch编程考级练习场'
            })

最后

作品页

完成的成品https://www.10jifen.com/scratch/project.html#128

关于scratch3.0二次开发继续更新,希望对大家有帮助。

出售源码/服务

最近很多机构和个人找到我的微信,问我是否卖源码或者可以提供服务。

为了确保大家买得放心,买的公平,我在这里统一说明一下:

  • 买源码:基本上是有研发能力的个人/机构,想透过源码了解核心解决方案,该方案采用买断制:提供源码与咨询,价格3万元。
  • 买服务:对技术不了解,但想提升机构形象和信息化的机构,该方案采用年费制:私有化搭建,价格5000元/年,包括服务器费用(域名与资源图片存储费用500元/年,根据存储量决定)。

有意向加微信详聊。

kk老师

如果文章帮助了你,请在右边点击打赏5C币,感谢!

 

 

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小鲁创客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值